https://blog.csdn.net/chengxuyuan997/article/details/81231679

正文

在说为什么引入指针这个问题前先带大家了解一下什么是指针?

指针最为简短的定义:指针即为内存的地址。  那什么是内存呢?举个栗子当我们计算 4*(46+4)时,我们人脑会想到先有个中间值 50 然后再计算成 200,计算机也会这样有一个 50 的中间值,我们人脑在计算的时候50 这个中间值保存在我们的万能的脑子中,计算机在出现最终答案前也会把这个中间值一个方便它进行下一步计算的地方,这地方就是内存,实际上我们写程序的时候定义的所有变量都保存在内存中,可以想象一个大的程序所占用的内存是不容小觑的,在计算机刚被制造出来的时候那些大佬是如何节省每一个字符的。至今内存的占用是每一个合格的程序员所需要注意的事情,至此我们得出一个结论:写程序需要尽可能少的内存。

那么内存的地址又是什么呢?这个说来话长,不了解的可以到网上和书上查看一下,每个地方都会有很多叙述。假如我们定义了char a=’A’,当需要使用这个‘A’时,除了直接调用变量a,另一种方式就是调用a的地址,即指向a的指针p(假设定义了char *p=&a)。这里请思考一个问题:究竟是a占用的内存大呢还是p占用的内存大,a显然只占了一个字节(char类型),p呢?p 占用了 4 个字节。既然p中存储的是a的地址,也就是说这个问题实际演变为了内存的地址需要多少位(bit)来编码。再假如我们定义的 char a1[30]="C语言程序设计能够让你成为优秀的程序员"占用 30 个字节,也有一个 char *p1= a1 这个时候 a1占用 30 个字节而 p1 占用4个字节(字符串地址 = 首字符地址)。 那么假如你要引用的是一个 5G 的东西(这个应该是CPU总线的地址不懂的暂时叫这个东西)用指针也还是 4 个字节即可。由此我们得出结论:使用指针型变量在很多时候占用更小的内存空间。

明白了引入指针的好处,我们再来看一个例子,第一节课是1班语文,2班数学,第二节课颠倒过来,1班要上数学,2班要上语文,那么第一节课下课后需要怎样作调整呢?方案一:课间1班学生全都去2班,2班学生全都来1班,当然,走的时候要携带上书本、笔纸、零食……场面一片狼藉;方案二:两位老师课间互换教室。怎样,有没有发现这个例子很像一道题目“请交换变量a和变量b的值”,现在,大家知道怎么做是最优解了么?

C语言 为什么要引入指针?的更多相关文章

  1. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...

  2. 【转载】C/C++语言void及void指针深层探索

    C/C++语言void及void指针深层探索 1.概述许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误.本文将对void关键字的深刻含义进行解说,并详述vo ...

  3. 函数指针玩得不熟,就不要自称为C语言高手(函数指针是解耦对象关系的最佳利器,还有signal)

    记得刚开始工作时,一位高手告诉我说,longjmp和setjmp玩得不熟,就不要自称为C语言高手.当时我半信半疑,为了让自己向高手方向迈进,还是花了一点时间去学习longjmp和setjmp的用法.后 ...

  4. C语言中的函数指针

    C语言中的函数指针 函数指针的概念:   函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...

  5. C语言精要总结-指针系列(一)

    考虑到指针内容繁多,这里将指针作为一个系列,从简入繁,一点一点深挖并掌握这C语言的精华.初步计划如下 此文为指针系列第一篇: C语言精要总结-指针系列(一) 内存与地址 我们可以把内存看做一排连续的房 ...

  6. C语言精要总结-指针系列(二)

    此文为指针系列第二篇: C语言精要总结-指针系列(一) C语言精要总结-指针系列(二) 指针运算 前面提到过指针的解引用运算,除此之外,指针还能进行部分算数运算.关系运算 指针能进行的有意义的算术运算 ...

  7. C语言第八讲,指针*

    C语言第八讲,指针* 一丶简单理解指针 说到指针,很多人都说是C语言的重点. 也说是C语言的难点. 其实指针并不是难.而是很多人搞不清地址 和 值.以及指针类型. 为什么这样说. 假设有两个变量,如下 ...

  8. [C语言] 数据结构-预备知识指针

    所有的伟大源于一个勇敢的开始 数据结构预备知识 指针 1.指针:是C语言的灵魂,指针=地址 地址:内存单元的编号 指针变量:存放内存单元地址的变量 int *p;//p是指针变量,int *表示该p变 ...

  9. C语言——指向函数的指针

    转载自:http://www.cnblogs.com/liangyan19910818/archive/2011/08/19/2145270.html C语言——指向函数的指针 函数类型 (* 函数指 ...

随机推荐

  1. *args 和**kwargs 的理解以及 函数的参数的总结

    一:函数参数的理解: def 函数名(函数参数): 函数体 例如: def func(a): # a 是形参 print(a) func(123) # 123 是实参 形参又分为: 关键字参数,位置参 ...

  2. thinkphp5.0学习笔记(一)基础知识与URL访问

    1.目录结构: 其中thinkphp子目录是框架核心目录 thinkphp结构: 2.入口文件 默认自带的入口文件位于public/index.php 应用目录为application,其结构: in ...

  3. Java各类型占字节数

    byte 1字节short 2字节int 4字节long 8字节float 4字节double 8字节char 2字节boolean 1字节 其中,换算关系: 1GB=1024MB 1MB=1024K ...

  4. tensorflow和pytorch的区别

    pytorch是动态框架,tensorflow是静态框架 针对tensorflow,我们先构造了一个计算图,构建完之后,这个计算图就不能改变了,我们再开启会话,输入数据,进行计算.那么这个流程就是固定 ...

  5. iis7 https配置方法并且http跳转https

    操作场景 本文档指导您如何在 IIS 中安装 SSL 证书. 说明: 本文档以证书名称 www.domain.com 为例. 本文档以操作系统 Windows10 为例.由于操作系统的版本不同,详细操 ...

  6. Hibernate的HQL多表查询

    HQL的内连接查询 对于HQL内链接查询,查询的是两张表的数据,这两张表的数据首先是保存在数组之中,然后在将每一个数组保存在List集合之中进行返回 代码片段: @Test // 内连接 public ...

  7. INPUT输入子系统——按键

    一.什么是input输入子系统? 1.1. Linux系统支持的输入设备繁多,例如键盘.鼠标.触摸屏.手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型.不同原理.不同的 ...

  8. Windows注册表内容详解

    Windows注册表内容详解 http://blog.sina.com.cn/s/blog_4d41e2690100q33v.html (2011-04-05 10:46:17)   第一课  注册表 ...

  9. HDU 6649 Data Structure Problem(凸包+平衡树)

    首先可以证明,点积最值的点对都是都是在凸包上,套用题解的证明:假设里两个点都不在凸包上, 考虑把一个点换成凸包上的点(不动的那个点), 不管你是要点积最大还是最小, 你都可以把那个不动的点跟原点拉一条 ...

  10. Django之视图(V)

    Django的View(视图) 一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应. 响应可以是一张网页的HTML内容,一个重定向,一个404错误, ...