求救!!! 请问这段代码错在哪里啦?

来源:百度知道 编辑:UC知道 时间:2024/06/20 09:26:32
#include<stdio.h>
void main()
{
char str[][10]={"china","beijing"},*p=str;
printf("%s\n",p);
printf("%s\n",p+10);

}
回复: 皇家救星1985
str 本身就是一个 指针???
非常感谢各位的回答!
不过还是投票决定吧!

#include<stdio.h>
void main()
{
char str[][10]={"china","beijing"},*p=*str;
//str是一个指针的指针
printf("%s\n",p);
printf("%s\n",p+10);

}
-----------------------------
是,str是一个常指针,指向一个常字符指针

类似的
char example[10];中example是一个常字符指针

这样写就对了,条理也比较清晰.程序中的 str 是这样一个意思:
当你定义的数组是一维数组时,str 就相当于一个指针,与char *p中的P可以等价的使用.当是二维数组时,str 就相当于一个二级指针,与char **p中的P可以等价的使用.你可以等价的调用它们.
#include<stdio.h>
void main()
{
char str[][10]={"china","beijing"};
char *p;
p=*str;
printf("%s\n",p);
printf("%s\n",p+10);

}

这是语法规范的问题,char str[][10]虽然是二维数组,但存储方式跟一维并无区别,仍是按顺序存储;char *p使得p默认只能指向一维数组(而str为二维),如果一定要让它指向str,可以char *p=(char*)str或char *p=str[0]或char *p=*str。