什么是指针数组?
一个数组,里面存放的元素均为指针类型数据,被称为指针数组。
其定义形式?
int *name[4];
基本实例一:利用数组初始化指针数组
#include<stdio.h> #include<iostream> #include<string.h> int main() { int a[5] = { 1,2,3,4,5 }; int* name[5] = { &a[0], &a[1], &a[2], &a[3], &a[4] }; int i; for ( i = 0; i < 5; i++) { printf("%d\n", *name[i]); } system("pause"); return 0; }
基本实例二:将字符串按照从小到大进行排序
#include<stdio.h> #include<iostream> #include<string.h> //将字符串按其首字母进行排序 //传入的是指针数组 void sort(char* str[],int n) { char* tmp; int i, j, k; //从第0个位置开始,到倒数第二个字符串 for (i = 0; i < n-1; i++) { //k用于记录当前的字符串小标, k = i; //遍历第i个之后的字符串,到最后一个为止 for ( j = i+1; j < n; j++) { //strcmp用于比较字符串str1和str2是否相同。如果相同则返回0; //如果不同,在不同的字符处如果str1的字符大于str2的字符,则返回1,否则返回-1 if(strcmp(str[k],str[j])>0) { // 将较小的赋值给k k = j; } //如果当前最小的位置已经不是i了,就将第i个位置和第k个位置的字符串进行交换 if (k != i) { tmp = str[i]; str[i] = str[k]; str[k] = tmp; } } } } void print(char* str[], int n) { int i; for ( i = 0; i < n; i++) { printf("%s\n", str[i]); } } int main() { //定义一个指针数组,指向的是数组中的每一个字符串 //注意在visual stdio2019中会报错, //中的第一种方式,一了百了 char* str[] = { "hello","goodbye","hi","hella" }; void sort(char* str[], int n); void print(char* str[], int n); int n = 4; sort(str, n); print(str, n); system("pause"); return 0; }
输出: