C语言指针数组的问题

void main()
{
char *name[] = {"aaa", "bbbb", "ccc", "dd"};
char **p;
int i;
for( i=0; i < 4; i++ )
{
p = name + i;
printf("%s\n", *p);
}
}

p = name + i;这句应该怎么理解,搞了一下午还没明白!求大神指导。

char *name[] = {"aaa", "bbbb", "ccc", "dd"};

name[0]到name[3]是四个指针,分别指向字符串"aaa", "bbbb", "ccc", "dd"

name+i就相当于&name[i],&是取地址运算,本身name[i]是一个指针,&name[i]就是指针的指针了。

所以可以给char **p这个指向指针的指针变量赋值

*(name+i)==*(&name[i])==name[i]

由于p=name+i;

所以:

*p=*(name+i)==name[i];

所以最后输出这四个字符串"aaa", "bbbb", "ccc", "dd"

追问

VC++6.0里数组都是指针来处理的吗?

追答

确切的处理方法,你只有去问微软。
不过用指针来处理数组,处理数组的速度比用下标法来处理的速度快。

追问

是不是这样?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-14
1。name是一个四维数组,元素是字符指针。初始化时,将字符串的首地址赋值给了每个元素。
2。name + i 这个表达式中的 i 指的是i * sizeof(变量)。而数组名是4字节。这样,name + i就对应name数组的第i个元素的地址了。
3。p = name + i; 表示把第i个元素的地址赋值给变量p。*p值就是字符串的首地址。

希望对你有帮助!
第2个回答  2013-04-14
p=name+i;
name指向是name这个字符串数组的第一个元素的指针
也就是说 *(name)=="aaa";
加i 这个i是以字符串的长度为单位的偏移
+1就指向第二个元素 加二就指向第三个元素 以此类推

char *name[]是定义一个元素为字符串的数组
第3个回答  2013-04-14
在声明name后,系统为其分派了一大块内存,其中分成四小块,而在name基础上增加数的意思是,要第几块内存,比如加0就是指第一块,加一就是第二块,此句就是让p一次指向这几个小块
第4个回答  2013-04-14
因为p是二重指针,p= name后,这个p+i 就是name数组中指向的第i个字符串的首地址追问

明白了!!!谢谢!

追答

OK

本回答被提问者采纳