求助一个关于C语言的基础知识,指针的

定义a是一个字符串数组,然后char*p=a+1;和charp;p=a+1;,这两个都成立,第二个我能理解,问题是第一个,a的话不是第一个元素的地址么,为什么取值了之后是... 定义a是一个字符串数组,然后char *p=a+1; 和 char p; p=a+1;,这两个都成立,第二个我能理解,问题是第一个,a的话不是第一个元素的地址么,为什么取值了之后是地址? 展开
 我来答
百度网友4c08a42
2013-01-16 · TA获得超过258个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:77万
展开全部
你的说法有错误。看例子吧。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;是错的。等号两边类型不一致。警告而已,毕竟字符和地址都是数值。
fhj0708
2013-01-16 · 超过15用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:38.3万
展开全部
第二个是错误的呀
第一个才正确
正如你所说的, a是第一个元素的地址, 但你要问为什么
因为书上有这么一句话, 这也就是传说中的规定
a+1 是第二个元素的地址 所以因该由 char* 来接其值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
taozishunjian
2013-01-16 · 超过22用户采纳过TA的回答
知道答主
回答量:153
采纳率:0%
帮助的人:70.5万
展开全部
a是第一个元素的地址
&a是整个数组的地址 虽然是一样的 意思不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式