新手上路之c指针理解 笔记

来源:互联网 发布:苹果电脑开淘宝店铺 编辑:程序博客网 时间:2024/05/22 23:55

指针如雾

  曾经指针让我如梦如幻,指针如雾啊,很多人都被折磨的要死不活的,问老师吧,你又不是计算机的,晓得那么清楚干嘛,看了一些网上大牛们和老师们的高见,分享一下心得,有错误的地方,还请多多指正.

指针之思

  为啥需要指针呢,我不用它,照样可以用其他方式实现,感觉用的还那么方便易懂.指针的好处在哪里呢?

指针初窥

   早期cpu远没有如今的强大,内存也是小的可怜,就像是一个有好几个嗷嗷待哺的孩子的普通人(精打细算,这些都是牛人呀),现在的计算机好比是有好多个私生子的风流多情多金的土豪(有钱任性潇洒,虽说有大把的内存,但不是无限的呢,处理的不好还是有可能呜呼的),所以嘛,没必要的浪费就不造了,节约是美德(现在不还是弘扬老祖宗的这种做法),同理,尽可能使程序占得内存最小.    通俗的指针解释,内存的地址(比如你的家庭地址)。    迷惑我好久的一个指针变量占几个字节问题,代码如下:
   # include<stdio.h>      int main(void)    {        char ch = 'a';        int i = 10;        double d = 42.025;        char * r = &ch;        int * p =  &i;        double * q = &d;        printf("%d %d %d\n", sizeof(r), sizeof(p), sizeof(q));        getchar();        getchar();        return 0;    } 

究竟是r占用的内存大呢还是ch占用的内存大…??
结果如下:
这里写图片描述

结果很平静的告诉我们一样大的,说说我的理解,内存的地址需要多少位(bit)来编码。2个字节的内存空间需要1位(编码为0、1),4个字节需要2位(编码为00、01、10、11),8个字节需要3位,16个字节需要4位,依次类推,
很容易解释32位,64位系统了,怎么算的呢,我的电脑有一块4G的内存,则需要32位来编码(2的32次方等于4G),这里的32位在计算机硬件上的体现实质上就是CPU地址总线的位数,也就是说,一个指针型变量所占的字节数取决于地址总线的位数(随系统位数的变化而变化),上面的问题中指针r,p,q运行在32位地址总线的机器上(32/8=4),就需占4个字节了。

既然指针占4字节,而我的变量自身却只占了1字节,综上所述程序节约内存的原则,还要指针啥事呢?你想想一波波数组的来临,指针r还是占4字节,使用指针变量大多情况下,还是展现了节约内存的原则的体现.

指针小结

 好比你懒得动了,叫了份外卖,外卖小哥,收到信息,根据你提供的住址,送货上门,假设是6楼,只能走楼梯,那个累啊(传送内容:吃的),你本人只需提供个地址,坐等吃的就行(指针),这就是用指针的好处呀.让你翻一下书的100-600页(指针),一会就翻完了,但是要把100-600页的内容背下来(数据),这就是差别.

题外话

使用指针的情况:
对同一份数据进行操作的2种情况。
操作分为:读和写
1, 对数据进行读操作,就是将数据复制一份去读和直接读,结局都是一样的,但其过程就不同了,复制总要耗时的,直接读肯定会更快一些,所以,对于只读的情况来说,使用指针是为了更高效的进行数据的传递。

2, 对数据进行写操作,分别复制一份数据和对数据直接操作,区别了,区别就体现出来了,复制一份数据,只是更改了副本,而原先的是不会被更改的,即,面对需要写操作(写数据)的情况下,使用指针用来更改同一份数据。
这也就能够理解的引用,引用只是多了包装变得精美了,引用实质上还是指针,所有引用能做到的效果,指针同样可以做到的.

原创粉丝点击