免费注册 查看新帖 |

Chinaunix

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

[C] 关于指针的本质,不涉及本质的本质........ [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-11-11 12:21 |只看该作者
linux_c_py_php 发表于 2012-11-10 11:57
指针存地址, 这就是本质.

应该把类型带上吧,不然*(p++)按啥增长?

论坛徽章:
3
摩羯座
日期:2013-11-12 20:06:19午马
日期:2013-11-27 16:35:55双鱼座
日期:2014-04-04 19:02:30
12 [报告]
发表于 2012-11-11 18:12 |只看该作者
Ager 发表于 2012-11-09 14:59
昨天就看到了关于“本质”的大争论 ……

关于这个问题,我就扯一点点:


Nice one, 脱离context来谈本质,是不切实际。

论坛徽章:
0
13 [报告]
发表于 2012-11-12 11:40 |只看该作者
程序是为了解决问题而存在的,所有的程序都必须关注问题世界及其求解之道。
比如,问题是“三个苹果再加上两个苹果一共有多少个苹果”,在C语言代码世界中会将问题的求解抽象为 3 + 2 。
注意这里的3和2绝对不是与数学世界中的3和2。在C代码世界中的3和2都有自己的数据类型——int这样一种性质。它的本质含义是3和2都在int类型的表示范围之内,并且经过二元“+”运算后得到的结果依然在int类型的表示范围之内。C语言用类型表明了自己的“有限”责任、它的局限性及对问题的认识程度。它知道自己能但绝对不是无所不能。
和C以前的高级语言截然不同的是,C语言不但关心问题世界,它还有一种高贵的“宗教情怀”。它不但关心现世,还以一种哲学高度关心自己以后将要栖身的那个彼岸世界——内存。
为了知道数据对象(Object)在内存中的位置,C语言创立了指向对象的指针这样的概念。由于不同的Object都具有各自的长度,所以显而易见的是,单单只用一个内存地址描述是绝对不够充分的。对于
int i;
&i这个指针其实是通过存放i这个Object的起始地址和i的size共同描述i的位置的,两者缺一不可。
函数(function)完全不同于Object,函数并没有size这种性质需要刻画,但需要额外刻画参数个数、顺序、类型以及返回值类型。因此指向函数的指针与指向对象的指针是性质完全不同的指针。对于
void f(void){}
&f所描述的绝对不仅仅是f()函数的入口地址,还有其参数及返回值的性质或信息。
第三类指针void *则是一种无奈的权宜之计,因为有时无法整体传递指针的完整信息,这时候只好化整为零分别传递。例如
void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *));
要想qsort()函数具有广泛的适用性,就只能分别处理指针具体的“值”及它所指向的对象的size。  

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP