main()
{char str[][10]={"China","Beijing"},*p=str;
printf("%s\n",p+10);
)
这个程序错在哪?对不起,我很菜啦,又找不到人请教……
还有,怎样将一个二维数组赋值给一个指针,又该以怎样的格式输出,最好能说的详细点。(答的好还会增加悬赏分)
參考答案:1、错的很荒唐。把结尾的“)”改为“}”!应该明白什么意思吧?
main()
{char str[][10]={"China","Beijing"},*p=str;
printf("%s\n",p+10);
}/*就是这里,main()函数的结束符*/
2、你这个程序思路是正确的。p指向str第一个字符串的首地址,如果读取p的值,它会顺着p指向的地址向下读,直到遇到字符串的结束符"\0",例如printf("%s\n",p);,输出结果就是 China;而p+i(i从0开始)表示指向第i+1个字符,如printf("%s\n",p+3);表示从第4个字符开始读到字符串结束,即输出为 na。因为你给每个字符串规定的长度是10个字符(str[][10]) ,所以p+10就指向了第二个字符串的首地址,输出结果为Beijing。
3、但是这样写很麻烦。如果你的字符串数组里不是两个字符串,而是多个,而每个字符串的长度也不是10,而是14,当你想读第5个字符串时,就得先计算前四个的总长度,然后再定位第5个字符串的首地址。这种情况下,可以定义 p=str[4],就指向第5个字符串的首地址了。
如:
main()
{char str[][10]={"China","Beijing"},*p;
p=str[1]; /*或者p=str+1;*/
printf("%s\n",p);
}/*输出结果同样为Beijing*/
4、更好的方法是定义指针数组*str[10]和指针的指针 **p。
#include "stdio.h"
main()
{
char *str[10]={"China","Beijing"},**p;
p=str;
printf("%s\n",*(p+1));
printf("%s\n",*(str+1));
printf("%s\n",str[1]);
printf("%s\n",p[1]);
printf("%s\n",*(++p));
}
此时,p就完全等效于str,以上5条输出语句完全相同。不过需要注意的是,p可以自身加减(如p++或++p),而str不行(str++或++str都是错误的)。
==========================
以上内容都是偶一个字一个字的打出来地,很辛苦啊,楼主酌情加分~~
==========================
关于指针的理解与应用,可以参考一下以下网址:
解释很独特,简单易懂。