以简单的例子说明指针数组
必须理解的是:
1.指针数组是数组,只不过数组里是指针型变量,一般用于字符串数组;
char *name[3]={"abc","def","ghi"};
2. 数组名就是数组的首元素地址;例如定义char name[3];
那么*name 和 name[0]相等;
先说指针数组,程序如下:
int main()
{
char *name[3]={"abc","def","ghi"};
for (int i = 0; i < 3; ++i) {
printf("%s\t",*(name+i)); //(1)
printf("%s\t",name[i]); //(2)
printf("%c\t",*(name[i])); //(3)
printf("%c\t",**(name+i)); //(4)
printf("%c\t",*(*(name)+i));//(5)
printf("%c\t",*(name[0]+i));//(6)
}
return 0;
}
char *name[3]={“abc”,“def”,“ghi”};表示这是个包含三个元素的数组,只不过元素为指针型,分别为name[0],name[1],name[2],他们都是地址,所以 name[i]和 *(name+i)就表示字符串 “abc”,“def”,“ghi”;这也是(1),(2)打印的结果;
既然name[0],name[1],name[2]是地址,那么 *name[i]和 **(name+i)就表示每个字符串的第一个元素,所以 (3),(4) 打印的是数组中每个字符串的第一个字母;即 a d g;
因为name[i]和 (name+i)就表示字符串 “abc”,“def”,“ghi”,将i取值为0;即name[0]和name都表示字符串“abc”;那么*(*(name)+i)) 和 *(name[0]+i)分别表示字符串“abc”里的每个字符,也就是 a b c;