免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: scutan
打印 上一主题 下一主题

[函数] 关于指针与函数的几点小结 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-09-19 18:02 |只看该作者
没有细看,鼓励一下原创.

论坛徽章:
0
12 [报告]
发表于 2007-09-19 18:33 |只看该作者
很受益,谢谢!

论坛徽章:
0
13 [报告]
发表于 2007-09-19 18:47 |只看该作者
恩,看不懂的可以去翻翻《C专家编程》的第三章(好像是这一章)

论坛徽章:
0
14 [报告]
发表于 2007-09-19 21:28 |只看该作者
写得很好,顶你~
第4条有点不明白,为什么访问int (*a)[10]要用*(*a+i)的方式呢?int (*a)[10]与a[10]有什么不同吗?用*(a+1)不可以?

论坛徽章:
0
15 [报告]
发表于 2007-09-19 21:30 |只看该作者
不可以
a+1移动sizeof(int)*10
*a+1移动sizeof(int)

原帖由 ddvv 于 2007-9-19 21:28 发表
写得很好,顶你~
第4条有点不明白,为什么访问int (*a)[10]要用*(*a+i)的方式呢?int (*a)[10]与a[10]有什么不同吗?用*(a+1)不可以?

论坛徽章:
0
16 [报告]
发表于 2007-09-19 21:35 |只看该作者
原帖由 ypxing 于 2007-9-19 21:30 发表
不可以
a+1移动sizeof(int)*10
*a+1移动sizeof(int)


这么说来,a是int [10]类型的指针咯?在内存里面是怎么放的?*a里面放的是什么?

[ 本帖最后由 ddvv 于 2007-9-19 21:38 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2007-09-19 21:41 |只看该作者
原帖由 ddvv 于 2007-9-19 21:28 发表
写得很好,顶你~
第4条有点不明白,为什么访问int (*a)[10]要用*(*a+i)的方式呢?int (*a)[10]与a[10]有什么不同吗?用*(a+1)不可以?


int (*a)[10]表示的是指向一个一维数组的指针, 该一维数组是一个int [10]类型, 一般用其指向一个二维数组的首地址, 如:

  1. int arr[4][10];
  2. a = arr;
复制代码

这种方式, 此时可以将arr看成4个数组, 每个数组都是一个10个整型的一个数组, 此时a就指向了其中的第0个以10个整型为单位的数组, 你要访问arr[1][3]; 就要使用a[1][3]的方式,
表示的是第1行第3的这个数.
*(a+1) 相当于是a[1], 其实(a+1)与*(a+1)的值是一样的, 因为(a+1)表示的是a[1]的地址, 而*(a+1)表示的是a[1]的值, 其实也就是a[1][0]的地址, 而它们是相同的地址.
对于这个问题, 我觉得谭浩强上面那儿讲得比较清晰, 可以参考一下!

论坛徽章:
0
18 [报告]
发表于 2007-09-19 21:45 |只看该作者
另外, a, *a这两个看待的对象不一样.
a+1跳过的是10个整型的距离而*a+1则是一个整型长度的距离. *a就已经使其减少一维了.

论坛徽章:
0
19 [报告]
发表于 2007-09-19 21:45 |只看该作者
恩,关于多为数组我晓得,只是不理解int (*a)[10]这个声明。
如此看来,a就相当与一个指针的指针,也就是int **a了,不知道这样理解对不对?

论坛徽章:
0
20 [报告]
发表于 2007-09-19 21:46 |只看该作者
不对

原帖由 ddvv 于 2007-9-19 21:45 发表
恩,关于多为数组我晓得,只是不理解int (*a)[10]这个声明。
如此看来,a就相当与一个指针的指针,也就是int **a了,不知道这样理解对不对?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP