| 
 | 
 
用一个示例说明指针的指针,指针的数组: 
 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] 就分别表示了地一行字符串中的第一个,第二个,地三个字符. |   
 
 
 
 |