群专题:C/C++的指针
这个周有点忙,被人扒了衣服,看了又看,还从了别人好几次,本来打算每周三左右做一个专题,一直拖到周五。昨天和欧文商量了一下,本期就讨论一下指针的问题。
我水平有限,能想到的也就这么多了,欢迎大家补充。
回复:
指针的作用就是指向某一块内存的位置,比如最常见的NULL指针,其实一个指针指向NULL并非哪都没指向,而是指向内存最开始的位置0x00000000,这个位置一般是属于内核程序拥有的,操作系统不允许用户程序调用
引用怎么用说呢,就相当于你就是我我就是你,那咱俩就是一个人了...............这个太抽象,大家找资料吧.........我也说不 来这玩意儿
内存里可以放什么?这个问题很有意思.大家都知道,要执行一个程序,就要把这个程序放到内存里,这里的程序就包括了data和code这些东西,其中是不是包含了数组啦,函数啦这些了? 这样就很容易了,函数,数组,变量 , 常量都是在内存里放着,放在哪了呢? 我也不知道,不过系统知道啊,加一个&(取地址符)就可以得到你要的那个地址了,函数指针就是说函数在内存里的首地址,数组指针................同理吧,不浪费我的键盘.
指针强制转换在下不太理解,不过void* 可以转化成任意的指针类型,这个很有用,比如malloc,别的情况下我没接触过,不过建议尽量不要去转化指针,而是去转化变量的类型,再重新取地址,这样不会出错
多重指针看书吧,对我来说一般没啥用,除了有时候想在数组里放字符串,听说有用,不过没用,我这人不瞎说,唯一的优点
指针和数组名的关系.............
相同点,都可以指向一块内存.......
不同点嘛....数组名是常量,指针是变量,还有内存分配方式不同
int a[10]; 现在就有了一个40B的内存被占用了,现在内存分配过了啊,这个得看清
int *b; 内存分配没有?自己想下就知道不同的地方了
再做个比较,a[1] = 1;这句话在这儿是没问题的,但是如果你b[1] = 1; 这样写的话结果我实在不忍心说出来......运气好报错,运气不好.........崩溃
你还可以给b赋值不能给a赋值,不举例了,书上大把,挺无聊的
记住指针可以进行加法运算,减法之类的对指针来讲是未定义操作,没有实际意义
有了这些个地址牛吧,想找啥都找得出来,还有啥是指针做不到的?因为指针直接控制了整个内存,系统保留的咱不用,那些如果用了后果肯定很严重,赌五毛钱
代码牛X的话,指针在编译后产生的目标代码基本上可以跟汇编差不多,我见过有例子,反编译后很强,C和指针那本书有,有兴趣可以找来看看,不过指针乱用的话效率提高也不会太多,算法垃圾用汇编一样还是一个字 慢
指针直接控制内存,如果使用不当的话你的机器就会当掉,有时候还会把别的程序毁掉,建议大家注意一点这个家伙,多写代码测试一下,还有就是一定要记住要给指针初始化后再使用,千万不要使用NULL指针
长度不够,不多说了
这里有最甜蜜的幸福,最博大的付出,最深刻的背叛,最强烈的绝望,最勇敢的坚强,最有力的反击!站在是非之外,看红尘最美不过月华清明、百花围簇!备注:在这个道德沦丧的时代,如果你想背弃誓言,轻易转身,那就不用再回头,因为没有人站在原地等你!