|
用一个示例说明指针的指针,指针的数组:
01 #include <stdio.h>
02
03 int main()
04 {
05 char *ptrarray[3] = {
06 "are you ok?",
07 "how do you do?",
08 "nice to meet you",
09 };
10
11 char **ptr = ptrarray;
12
13 printf("%s\n", *ptrarray);
14 printf("%s\n", *(ptrarray+1));
15 printf("%s\n", *(ptrarray+2));
16 printf("---------------\n");
17
18 printf("%s\n", *ptr);
19 printf("%s\n", *(ptr+1));
20 printf("%s\n", *(ptr+2));
21 printf("----------------\n");
22
23 printf("%c,%c,%c\n", *ptr[0],*ptr[1],*ptr[2]);
24
25 printf("%c,%c,%c\n", **ptr,**(ptr+1),**(ptr+2));
26
27 printf("%c,%c,%c\n",ptr[0][0],ptr[0][1],ptr[0][2]);
28
29 return 0;
30
31 } 运行输出:[root@localhost C]# ./ptr-array.exe
are you ok?
how do you do?
nice to meet you
---------------
are you ok?
how do you do?
nice to meet you
----------------
a,h,n
a,h,n
a,r,e
程序说明:
05)定义一个指针数组(相当于一个二维数组)。
11)ptr为指针的指针;因为指针数组的数组名就是一个指针的指针,所以 ptrarray 赋值给 ptr 正确。
13-15) 因为 ptrarray[] 为一个指针数组,它里面的元素是一个指针,这里为字符串的指针. 而 ptrarray 为指针的地址(即指针的指针),所以 *ptrarray 表示的是字符串的指针,故打印出来的结果就是输出字符串.
12-20) 这里类似, 其实就是把 ptrarray 这个地址赋值到一个指针的指针变量 ptr 中去,就是为了以后方便使用 ptr 这个变量进行数组的操作
23) 分别打印出数组中每一行字符串的头一个字母.*ptr 为第一行字符串的指针,所以 *ptr[0],*ptr[1],*ptr[2] 分别表示地一行,第二行,第三行字符串的指针,也就是这几行字符串的首地址,即也指向了这些字符串的首个元素.
25) 和 23) 一样,只是另外一种表示方法
27) 因为 ptr 和 ptrarray 一样;所以可以把 ptr 看作是这个数组的另外一个数组名,而字符串指针数组可以认为是字符的二维数组. 所以,ptr[0][0],ptr[0][1],ptr[0][2] 就分别表示了地一行字符串中的第一个,第二个,地三个字符. |
|