免费注册 查看新帖 |

Chinaunix

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

对C语言指针的讨论:应当如何理解、使用指针?《狂人C:程序员入门必备》有奖试读 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2010-12-12 18:36 |只看该作者
地址就是地址
指针是一种变量,它的性质依赖其指向的数据类型。
数组名,既不是变量也不是指针。(类似于 ...
jc_zhong 发表于 2010-12-11 22:28


int i;
&i 难道不是指针吗?除了是指针它还能是别的什么吗?

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
32 [报告]
发表于 2010-12-12 18:39 |只看该作者
回复  mirnshi


    尊重你的观点。JAVA语言没有指针也是有内存泄漏。但是如果C语言分配的指针需要程序 ...
renxiao2003 发表于 2010-12-12 12:52


内存泄漏有时候比较难查,但是至于段错误,应该好查。

论坛徽章:
2
技术图书徽章
日期:2013-09-04 15:21:51酉鸡
日期:2013-11-01 21:20:20
33 [报告]
发表于 2010-12-12 18:43 |只看该作者
对多个*放在变量前的情况不好理解。
ecjtubaowp 发表于 2010-12-12 17:37


2个星,就是指针的指针,3个星,就是指针的指针的指针,以此类推。

论坛徽章:
0
34 [报告]
发表于 2010-12-12 20:50 |只看该作者
感觉指针这个词的翻译有点误导初学者,其实指针不过是整型变量,只不过它的值一般是其他变量的地址值。有些初学者一看指针,很容易啊,我会了,看了书后会使用一阶指针,但二阶、三阶或者“复杂”点的指针情况就又搞不懂了,说明他们还是没有真正理解指针的原理,很多初学者就是这个弯老拐不过来,这个弯拐过去了,指针一点也不难,不管使用几阶指针,都得心应手。
其实指针不会比其他的部分更难学, 只是用的时候更容易出错而已,关键你要彻底理解指针的涵义,理解透彻之后,你再看那些指针用法,你就会发现指针相当好用的。
指针就是一种间接访问,只不过使用很灵活,才让一些初学者感到困难,掌握了原理之后,就会觉得万变不离其中,使用起来也就得心应手了。指针其实并不神秘,说白了指针就是地址,指针变量就是存放地址的变量,可以存放一个变量的首地址。
只要搞清楚c使用内存的方法就没有问题了!我初学c时对这个问题没概念,指针就一头雾水,后来清楚了,就怎么用指针都行!

论坛徽章:
0
35 [报告]
发表于 2010-12-12 20:59 |只看该作者
个人认为指针不是最难的,最难的是数据结构!指针也是一个变量,懂得变量的内存形式,指针也就比较好懂的了!
指针本身并不难理解,但使用起来陷阱很多,一不小心就会把整个程序搞崩溃,用指针写大点的程序就明白了,所以不建议使用太多指针。
比较难理解的是指针数组,数组的指针,指针的指针,之类的由指针引出的其他问题,尤其是当写大一点的程序的时候,C++中更是明显!
我想如果C/C++中没有指针的概念,而用整型UNSIGNED LONG代替指针,
int a;
unsigned long addr = &a;
对于初学者来说就好理解多了。

总之,对指针概念的理解不算难,而要很好掌握则要靠从代码编写调试中获取实战经验,这才是最难的。

论坛徽章:
0
36 [报告]
发表于 2010-12-12 21:26 |只看该作者
感觉指针这个词的翻译有点误导初学者,其实指针不过是整型变量,只不过它的值一般是其他变量的地址值。有些 ...
nokianihao 发表于 2010-12-12 20:50



    不赞成这位网友的看法
    指针是一种数据类型,而整数类型是另一种数据类型,他们的运算规则截然不同,甚至拥有的运算种类也互不相同,这是根本性的区别。不能混为一谈。
    况且指针的值不一定是“变量”的地址,例如函数的入口地址就绝对不是变量的地址。再如
    int *p=(int *)malloc( sizeof(int) ) ;
    这里p指向的对象就不是变量,因为变量都是有名字的。

论坛徽章:
0
37 [报告]
发表于 2010-12-12 21:30 |只看该作者
个人认为指针不是最难的,最难的是数据结构!指针也是一个变量,懂得变量的内存形式,指针也就比较好懂的了 ...
motorocke6 发表于 2010-12-12 20:59



    有些语言没有指针,数据结构就很难构造
    为什么多数数据结构的书都是用C/C++描述?可以窥见指针在构造数据结构时的独特作用

论坛徽章:
0
38 [报告]
发表于 2010-12-12 22:59 |只看该作者
回复 31# KBTiller
按照你的理解,那么:
int i;
int j;
&i = &j;

能编译通过?这就是指针与地址的区别,指针是存储着地址信息的变量,非地址本身!
把地址等同于指针,我认为是错误的的。

论坛徽章:
0
39 [报告]
发表于 2010-12-12 23:15 |只看该作者
回复  KBTiller
按照你的理解,那么:
int i;
int j;
&i = &j;

能编译通过?这就是指针与地址的区别 ...
jc_zhong 发表于 2010-12-12 22:59



    &i = &j;
编译不能通过的原因是 &i 不是可修改的左值,而不是因为&i不是变量的缘故

论坛徽章:
0
40 [报告]
发表于 2010-12-12 23:15 |只看该作者
我觉得不能那么说
地址只是内存单元的编号
对这个编号是不可能进行什么运算的

实际上,对指针的操作 ...
KBTiller 发表于 2010-12-11 00:34



    可以理解为“地址只是内存单元的编号“,但“对指针的操作(运算)很大一部分是对“一块内存”的操作,而不是对内存单元编号(地址)的操作。”

   有点不妥,对“一块内存”的操作,要是我这块内存不是连续的呢,那是一块么?既然你认为“内存单元编号是地址”,那对该指针的操作,即修改指针本身都是很常见的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP