#include<stdio.h>
int main()
{
char str[][10]={"A","Beijing"},*p[2];
p[0]=str,p[1]=str+1;
printf("%s\n%s",p[0]+10,p[1]);
return 0;
}
虽然地址是正确的,但看来你的C编译器对指针类型检查相对严格。我的MinGW-gcc没有编译报错(但有警告),MinGW-g++则会报错。
这在赋值的时候出的问题。*p[2] 是一个指针数组,所以赋值的时候应该将字符串的首地址赋值给p[0]或者p[1]。"A"的首地址应该是str[0],"Beijing"的首地址是str[1],所以赋值等式应该是p[0] = str[0]; p[1] = str[1];
编译不过是因为在p[0]跟p[1]进行赋值的时候,左右两边的类型不对,参照你的写法,赋值也可以以p[0] = *str;p[1] = *(str + 1);