第1个回答 2014-08-01
你的说法有错误。看例子吧。char * a[]={"china", "usa", "russia"};
C语言没有字符串类型。a是一个字符指针数组。把3个字符串放到常量区,返回它们的地址,放到数组中。数组名被编译成指向首元素的地址常量。
a指向元素a[0]。而a[0]是char *型的,所以a是char **型的。相似地,命令行参数argv常常被写成char * argv[],当然也可以写成char * * argv。(数组名作为形参,其实是指针变量。argv的值可以改变,当然这一般没有意义,除了你想抛掉argv[0]那个程序名参数。)
由于a代表了数组,所以&a的类型是char * (*)[3]型。这种类型是指向数组的指针,指向的数组中应该有3个元素,每个元素又是char *型。
至于char * p = a+1; 和 char p; p=a+1;
等号左右两边类型肯定不匹配,编译时会有警告。也许你是写错了。
也许你说的a,是字符数组,而非字符串的数组。
char a[]={"china"};
那么char * p = a+1;是对的。a是char *型。指向首元素'c'。
char p; p=a+1;是错的。等号两边类型不一致。警告而已,毕竟字符和地址都是数值。
以上回答你满意么?