免费注册 查看新帖 |

Chinaunix

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

[C] [原创]对于C语言中指针和数组的认识和看法,欢迎讨论 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2007-09-20 09:14 |只看该作者
最近几天讨论指针的帖子好像挺多
把俺的一篇老点的帖子顶起来
跟大家讨论讨论

论坛徽章:
0
22 [报告]
发表于 2007-09-20 09:41 |只看该作者
原帖由 ypxing 于 2007-9-20 09:14 发表
最近几天讨论指针的帖子好像挺多
把俺的一篇老点的帖子顶起来
跟大家讨论讨论

这年头,还真有自掘自家坟的。。 不过还是蛮好心的

论坛徽章:
0
23 [报告]
发表于 2007-09-20 09:44 |只看该作者


原帖由 ruoyisiyu 于 2007-9-20 09:41 发表

这年头,还真有自掘自家坟的。。 不过还是蛮好心的

论坛徽章:
0
24 [报告]
发表于 2007-09-20 11:02 |只看该作者
支持一把吧,别沉了 算是为上面的话sorry一下

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

  1. int a[2][3]={{1,2,3,}{4,5,6}}
  2. printf("%p %p %p",a,*a,&a)
复制代码

为什么3个值都是一样的?

论坛徽章:
0
26 [报告]
发表于 2007-09-20 11:57 |只看该作者
原帖由 ddvv 于 2007-9-20 11:46 发表
对于

int a[2][3]={{1,2,3,}{4,5,6}}
printf("%p %p %p",a,*a,&a)
为什么3个值都是一样的?


此时它们都是指向了这个二维数组的首地址, 但是所看待的对象不同.
a是以int [3]这个数组为对象来看待的, 此时表示的是a[0]的首地址, 此时a+1所增加的距离实际上是3*sizeof(int)这么长. 相当于是以一个int [3]为单位来进行增加
*a是以int类型来看待的, 此时表示的是a[0][0]的首地址, 现在*a+1所增加的距离实际上是sizeof(int)这么长, 相当于是以一个int为单位来进行增加.
而&a也是这个数组的首地址, 此时a+1增加的就是 2*3*sizeof(int)这么长的距离了. 相当于是以一个整体为单位来增加的.

另外还有一个例子就是
int a[10];
a+1, &a+1, 看看它们的区别, 就应该好懂了.
其实谭浩强的那本书上对这个问题有一个比较好的比喻, 是以士兵排队来进行类比的, 还是比较形象, 可以看看!

论坛徽章:
0
27 [报告]
发表于 2007-09-20 11:57 |只看该作者
老谭有详细解释
第二版p225

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
28 [报告]
发表于 2007-09-20 12:03 |只看该作者
原帖由 scutan 于 2007-9-20 11:57 发表


此时它们都是指向了这个二维数组的首地址, 但是所看待的对象不同.
a是以int [3]这个数组为对象来看待的, 此时表示的是a[0]的首地址, 此时a+1所增加的距离实际上是3*sizeof(int)这么长. 相当于是以一个int  ...


scutan兄不仅为人热心,而且编程方面的知识有很深入,可以考虑申请版主啊。我先支持一把。

论坛徽章:
0
29 [报告]
发表于 2007-09-20 12:11 |只看该作者
原帖由 Godbach 于 2007-9-20 12:03 发表


scutan兄不仅为人热心,而且编程方面的知识有很深入,可以考虑申请版主啊。我先支持一把。

偶也支持,不过C版主太多了
我在想,能不能考虑把C和C++分开,要不每天帖子也太多了

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
30 [报告]
发表于 2007-09-20 12:36 |只看该作者
原帖由 perljoker 于 2007-9-20 12:11 发表

偶也支持,不过C版主太多了
我在想,能不能考虑把C和C++分开,要不每天帖子也太多了


偶也同意楼上的看法。觉得C和C++侧重的方面还是不一样的。分开了也好。昨天还看有篇帖子说C/C++版的版主是不是都做系统开发的,意思主要还是C的问题多,有点打压C++了,哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP