1、C语言指针数组(每个元素都是指针)如果一个数组中的所有元素保存的都是指针,那么我们就称它为指针数组。指针数组的定义形式一般为:dataType *arrayNamelength; 的优先级高于*,该定义形式应该理解为:dataType *(arrayNamelength);括号里面说明arrayName是一个数组,包含了length个元素,括号外面说明每个元素的类型为dataType *。除了每个元素的数据类型不同,指针数组和普通数组在其他方面都是一样的,下面是一个简单的例子:1. #include 2. int main()3. int a = 16, b = 932, c = 100;4.
2、 /定义一个指针数组5. int *arr3 = &a, &b, &c;/也可以不指定长度,直接写作 int *parr6. /定义一个指向指针数组的指针7. int *parr = arr;8. printf(%d, %d, %dn, *arr0, *arr1, *arr2);9. printf(%d, %d, %dn, *(parr+0), *(parr+1), *(parr+2);10.11. return 0;12. 运行结果:16, 932, 10016, 932, 100arr 是一个指针数组,它包含了 3 个元素,每个元素都是一个指针,在定义 arr 的同时,我们使用变量 a、b
3、、c 的地址对它进行了初始化,这和普通数组是多么地类似。parr 是指向数组 arr 的指针,确切地说是指向 arr 第 0 个元素的指针,它的定义形式应该理解为int *(*parr),括号中的*表示 parr 是一个指针,括号外面的int *表示 parr 指向的数据的类型。arr 第 0 个元素的类型为 int *,所以在定义 parr 时要加两个 *。第一个 printf() 语句中,arri 表示获取第 i 个元素的值,该元素是一个指针,还需要在前面增加一个 * 才能取得它指向的数据,也即 *arri 的形式。第二个 printf() 语句中,parr+i 表示第 i 个元素的地址,
4、*(parr+i) 表示获取第 i 个元素的值(该元素是一个指针),*(parr+i) 表示获取第 i 个元素指向的数据。指针数组还可以和字符串数组结合使用,请看下面的例子:1. #include 2. int main()3. char *str3 = 4. ,5. C语言中文网,6. C Language7. ;8. printf(%sn%sn%sn, str0, str1, str2);9. return 0;10. 运行结果:C语言中文网C Language需要注意的是,字符数组 str 中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符数组是分开的。也只有当指针数组中每个元素的类型都是char *时,才能像上面那样给指针数组赋值,其他类型不行。为了便于理解,可以将上面的字符串数组改成下面的形式,它们都是等价的。1. #include 2. int main()3. char *str0 = ;4. char *str1 = C语言中文网;5. char *str2 = C Language;6. char *str3 = str0, str1, str2;7. printf(%sn%sn%sn, str0, str1, str2);8. return 0;9.