新手上路之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, 对数据进行写操作,分别复制一份数据和对数据直接操作,区别了,区别就体现出来了,复制一份数据,只是更改了副本,而原先的是不会被更改的,即,面对需要写操作(写数据)的情况下,使用指针用来更改同一份数据。
这也就能够理解的引用,引用只是多了包装变得精美了,引用实质上还是指针,所有引用能做到的效果,指针同样可以做到的.
- 新手上路之c指针理解 笔记
- 新手上路之监听器 笔记
- 新手上路之面向对象 笔记
- 新手上路之oracle 事务 笔记
- 新手上路之oracle JDBC 笔记
- 新手上路之AJAX AJAX笔记小结
- driver之新手上路
- 新手ISV上路之三----SKU概念理解
- 新手上路之oracle 92 99 表连接(笔记)
- 新手上路之oracle 视图 索引(了解)笔记
- 新手上路之oracle 增,删,改,查操作 笔记
- 新手上路之 js 创建对象篇 代码笔记
- 新手上路 js 之 this关键字 代码笔记
- 新手上路之 HttpServlet和常用对象 笔记
- 新手上路之容器ArrayList遍历总结 笔记
- 新手上路之容器HashMap遍历总结 笔记
- 新手上路--C语言学习
- 新手上路之主板篇
- Android照片墙加强版,使用ViewPager实现画廊效果
- 18. php system(),exec() ,passthru() 函数
- docker——kafka集群安装
- MySQL二进制日志复制方法和高可用架构设计的理解
- 数字价格转中文汉字大写工具类
- 新手上路之c指针理解 笔记
- HashMap的工作原理
- C语言-调用蜂鸣器实现键盘弹琴
- 小米前端实习面试题和一些经验
- ACM讲座
- hihocoder 1580 Matrix [dp+枚举+rmq]
- 《罪恶王冠》真的烂尾了吗?
- 接口回调
- 97. Interleaving String