| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 677 人关注过本帖
标题:关于指针引用二维数组的问题
取消只看楼主 加入收藏
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
结帖率:100%
收藏
已结贴  问题点数:8 回复次数:2 
关于指针引用二维数组的问题
假设定义一个二维数组
 int    ​arr[3][3] = {1,2,3,4,5,6,7,8,9};
那么
printf("\n%p",arr+1);
printf("\n%p",*arr+1);
printf("\n%p",&arr+1);
下面是打印结果
010BFE0C
010BFE03
010BFE24
​在数组中数组名本来不就是数组的首地址嘛 ,*arr+1(如果说*arr是指针的,那么这个指针从来没有定义过啊)取出来的为什么不是数组的内容而还是地址呢,还有这里的arr+1,&arr+1原理上的区别在哪里。
[code=c][/code]
2015-01-12 10:25
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
回复 3楼 rjsp
*arr+1 中 arr 类型降阶为 int (*)[3],所以 *arr 类型为 int [3],内容为 { 1, 2, 3 }; *arr 再次降阶为 int*,所以 *arr+1 类型为 int*, 指向 2;标红色的还是没太明白。
--还有数组中*arr不表示取内容了?一维数组中还是取内容的啊
比如 int arr[4] = {1,2,3,4}  *arr取的是数据里的元素吧
2015-01-12 16:06
轉身已陌路
Rank: 2
等 级:论坛游民
帖 子:25
专家分:16
注 册:2014-12-25
收藏
得分:0 
回复 8楼 yahwei
现在已经搞明白了,在二维数组中是要讲究行和列的,每一行都是个以为数组,那么这样的话,二维数组中存在这二级指针,*arr其实就当二级指针来理解最好不过了,你如说一个二维数组,int arr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};那么 arr,*arr,&arr都去首地址,但是其意义是有很大区别的arr是代表行的首地址,加1只能取下一行的首地址,*arr是取第一行第一列的首地址,加1的话当然就取第一行第二列的地址,再来说说&arr,取sizeof(&arr)可知长度是48,所以&arr+1指向下一个数据空间的长度,我只是搞清楚了怎么取,怎么用了,但是这个机制原理还有待研究。
2015-01-13 14:18
快速回复:关于指针引用二维数组的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031276 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved