免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2299 | 回复: 7
打印 上一主题 下一主题

[C] 多维数组和指针的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-06 00:46 |只看该作者 |倒序浏览
#include <stdio.h>

int main(void) {
char arr[3][6]={"12345","23456","34567"};

char (*pp)[6];
pp=arr;

printf("%xd\n",pp);
printf("%xd\n",pp+1);
printf("%xd\n",pp+2);

printf("%xd\n",*pp);
printf("%xd\n",*pp+1);
printf("%xd\n",*pp+2);
printf("\n");

return 0;
}


pp输出后其实本来就是一个地址 而*pp取值后还是一个地址 而且值相等

只是区别在于它们+1 +2的偏移量不同 pp+1的偏移量是6个char长度   *pp+1的偏移量是1个char长度???

对于一个指向一个数组的指针 取值的意思是不是还是获得相同的地址 但偏移量不同 这样就可以控制访问子元素?

请指教一下

[ 本帖最后由 a8e8c1ca5b 于 2008-5-6 00:49 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-05-06 01:11 |只看该作者
int a[10]
a     就是代表这个数组的第一个元素的地址.
&a   就是代表这整个数组的地址, 只是它们的值是一样的.
就好比 int a[10][4]
a+1        表示的是a[1]的地址, 即&a[1]
*(a+1)   表示的是a[1][0]的地址, 即&a[1][0] or a[1], 但是实际上它们的值也是一样的.

论坛徽章:
0
3 [报告]
发表于 2008-05-06 01:23 |只看该作者

回复 #2 xiaozhu2007 的帖子

good explanation

另外,楼主也可以看看谭浩强那本书的二维数组那一节,也讲得不错。关键在于类型不一样。

论坛徽章:
0
4 [报告]
发表于 2008-05-06 01:24 |只看该作者
*(a+1)   表示的是a[1][0]的地址, 即&a[1][0] or a[1], 但是实际上它们的值也是一样的.

这个就是问题关键啊  *(a+1)和a+1的值是一样的 上面说的我都明白

不过对a+1取值 这个步骤怎么理解?



我只了解指向一个数组的首地址  还没接触过指向整个数组的概念 我那本书没讲 ...

[ 本帖最后由 a8e8c1ca5b 于 2008-5-6 01:26 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2008-05-06 01:37 |只看该作者
原帖由 a8e8c1ca5b 于 2008-5-6 01:24 发表
*(a+1)   表示的是a[1][0]的地址, 即&a[1][0] or a[1], 但是实际上它们的值也是一样的.

这个就是问题关键啊  *(a+1)和a+1的值是一样的 上面说的我都明白

不过对a+1取值 这个步骤怎么理解?



我只了解 ...




对于int a[10][20]来说,其实你可以把它看成是一个一维数组,数组有10个元素,其每个元素都是一个int[20]的类型。
和平时所见的int b[10]相类似,b+1此时指向的是b[1]的地址,&b[1]。
同理a+1此时指向的就是其a[1]的元素的首地址。即&a[1],
但是此时a[1]的类型是一个int[20]的类型,所以其首地址,即&a[1]的值也就是其第一个元素的地址,即&a[1][0]的值。数值上是相同的。不过前者是以int[20]为单位,后者是以一个int类型为单位而已。

论坛徽章:
0
6 [报告]
发表于 2008-05-06 01:39 |只看该作者
好象明白了一点  如果一个数组的元素是数组 那么取这个元素的值 的意思 就是取这个数组的地址?
可能这点我没理解

论坛徽章:
0
7 [报告]
发表于 2008-05-06 10:00 |只看该作者
原帖由 a8e8c1ca5b 于 2008-5-6 01:39 发表
好象明白了一点  如果一个数组的元素是数组 那么取这个元素的值 的意思 就是取这个数组的地址?
可能这点我没理解

有些东西只有在用它的时候才会真正明白它要怎么样以及用的时候需要注意的问题,必要的错误是无法避免的

论坛徽章:
0
8 [报告]
发表于 2008-05-06 15:57 |只看该作者
我对数组指针这块也模模糊糊的,我也要回去看看谭老的那本书了,学习了!
发现了一句关键:数组名代表数组首元素的地址!

[ 本帖最后由 zszjxh 于 2008-5-7 11:21 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP