char数组指针地址打印

charga[10];chargb[10][10];strcpy(ga,"abc");strcpy(gb[0],"cde");strcpy(gb[1],"edf");pr... char ga[10];
char gb[10][10];
strcpy(ga, "abc");
strcpy(gb[0], "cde");
strcpy(gb[1], "edf");
printf("[%s]\n", ga);
printf("[%s]\n", &ga);
printf("[%s]\n", ga + 1);
printf("[%s]\n", (&ga) + 1);
printf("\n");
printf("[%s]\n", gb + 1);
printf("[%s]\n", (&gb) + 1);

打印出:
[abc]
[abc]
[bc]
[]

[edf]
[abc]

其中:
1、printf("[%s]\n", (&ga) + 1);打印的是空值,是否因为(&ga)相当于将ga作为二维数组,那(&ga)+1为什么是空值?
2、为什么printf("[%s]\n", (&gb) + 1);打印出的是[abc]呢?

谢谢指点!
那为什么gb后面是ga呢?不是先对ga赋值么?

有人说:ga就是指向ga[]的指针,地址上在加&直接就错了,编译都不能过。
但我可以编译运行啊?
展开
 我来答
tattackor
2010-11-14 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:884万
展开全部
1、printf("[%s]\n", (&ga) + 1);打印的是空值,是否因为(&ga)相当于将ga作为二维数组,那(&ga)+1为什么是空值?

ga相当于字符指针,(&ga)则是指针(地址)的指针, 它不能用%s来打印,应该这样printf("[%x]\n", (&ga) + 1);用%x来打印指针值

2、为什么printf("[%s]\n", (&gb) + 1);打印出的是[abc]呢?
gb的值=&gb, 二维以上数组特有的性质:&gb=gb=*gb。
zhaojiefeng119
2010-11-14 · TA获得超过643个赞
知道小有建树答主
回答量:637
采纳率:0%
帮助的人:599万
展开全部
个人观点:
在内存中gb后面就是ga gb的值比ga小100 (这你自己试一下就知道了)
ga的类型是一维指针
所以&ga的类型二维指针是 char(*)[10] 所以 &ga+1 不是加1而是加10 所以读取的是ga后面的数据所以是空的
gb是二维指针
所以&gb的类型是三位指针char (*)[10][10] 所以&gb+1 内存地址加的是100 就刚好指到gb后面的ga的内容 所以输出地是ga的内容
你可以改成这样 输出就和前面的一样了 (char *)&ga+1 (char (*)[10])&gb+1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式