群专题:C/C++的指针

    这个周有点忙,被人扒了衣服,看了又看,还从了别人好几次,本来打算每周三左右做一个专题,一直拖到周五。昨天和欧文商量了一下,本期就讨论一下指针的问题。

    指针可以说是C/C++的精髓之一。掌握好了指针,可以将编程过程简化好多。但指针也是一把双刃剑,用好了,程序优美,效率也能提高,但用不好,却会引发程序崩溃,成为你是噩梦,也许因为如此,Java好像就取消了指针这个概念。
    将指针总结的几个方面,大家各抒己见。
1、指针的本质
2、引用的相关概念
3、函数指针
4、指针数组和数组指针
5、指针的强制转换
6、多重指针(讨论两重就好了)
7、指针与数组名的关系
8、指针的运算
9、指针使用的注意事项
10、为什么一个地址可以做这么多事情,原因在那里?

    我水平有限,能想到的也就这么多了,欢迎大家补充。

 回复:

指针的作用就是指向某一块内存的位置,比如最常见的NULL指针,其实一个指针指向NULL并非哪都没指向,而是指向内存最开始的位置0x00000000,这个位置一般是属于内核程序拥有的,操作系统不允许用户程序调用
引用怎么用说呢,就相当于你就是我我就是你,那咱俩就是一个人了...............这个太抽象,大家找资料吧.........我也说不 来这玩意儿
内存里可以放什么?这个问题很有意思.大家都知道,要执行一个程序,就要把这个程序放到内存里,这里的程序就包括了data和code这些东西,其中是不是包含了数组啦,函数啦这些了? 这样就很容易了,函数,数组,变量 , 常量都是在内存里放着,放在哪了呢? 我也不知道,不过系统知道啊,加一个&(取地址符)就可以得到你要的那个地址了,函数指针就是说函数在内存里的首地址,数组指针................同理吧,不浪费我的键盘.
指针强制转换在下不太理解,不过void* 可以转化成任意的指针类型,这个很有用,比如malloc,别的情况下我没接触过,不过建议尽量不要去转化指针,而是去转化变量的类型,再重新取地址,这样不会出错
多重指针看书吧,对我来说一般没啥用,除了有时候想在数组里放字符串,听说有用,不过没用,我这人不瞎说,唯一的优点
指针和数组名的关系.............
相同点,都可以指向一块内存.......
不同点嘛....数组名是常量,指针是变量,还有内存分配方式不同
int a[10]; 现在就有了一个40B的内存被占用了,现在内存分配过了啊,这个得看清
int *b; 内存分配没有?自己想下就知道不同的地方了
再做个比较,a[1] = 1;这句话在这儿是没问题的,但是如果你b[1] = 1; 这样写的话结果我实在不忍心说出来......运气好报错,运气不好.........崩溃
你还可以给b赋值不能给a赋值,不举例了,书上大把,挺无聊的
记住指针可以进行加法运算,减法之类的对指针来讲是未定义操作,没有实际意义
有了这些个地址牛吧,想找啥都找得出来,还有啥是指针做不到的?因为指针直接控制了整个内存,系统保留的咱不用,那些如果用了后果肯定很严重,赌五毛钱
代码牛X的话,指针在编译后产生的目标代码基本上可以跟汇编差不多,我见过有例子,反编译后很强,C和指针那本书有,有兴趣可以找来看看,不过指针乱用的话效率提高也不会太多,算法垃圾用汇编一样还是一个字 慢
指针直接控制内存,如果使用不当的话你的机器就会当掉,有时候还会把别的程序毁掉,建议大家注意一点这个家伙,多写代码测试一下,还有就是一定要记住要给指针初始化后再使用,千万不要使用NULL指针
长度不够,不多说了

 

posted @ 2009-04-10 13:48  Owen Wilson  阅读(215)  评论(0编辑  收藏  举报