C提高(2)/指针
来源:互联网 发布:龙卷风优化软件 编辑:程序博客网 时间:2024/05/18 03:47
我们在之前的blog中曾经提到过一些指针的知识。指针就是地址,地址就是指针。所以指针的概念和内存的概念是紧密联系的。指针的学习贯穿整个C语言的学习。本节就在原来的基础上再讲讲有关指针的一些知识。
指针也有数据类型
如何理解这句话?
我们在上一节知道,数据类型的本质是固定内存块大小的别名,是编译器方便为变量分配内存空间所设置的。指针变量也是一种变量,也占据一定的内存空间。所以说指针也是有数据类型的,这个数据类型,我们把它称为基类型。由指针所指向变量所决定的。
这个基类型有什么用呢?我们知道,无论指针的基类型是int也好float也好double也好char也好,指针变量所占据的内存空间都是四个字节。尽管基类型对指针变量所占内存块大小没有影响,但是它却影响的指针的步长。当我们执行语句p++时,对基类型为int的指针p来说,移动4个字节;但对基类型为char的指针p来说,指针移动1个字节。基类型的用处就是在移动指针变量时,确定移动内存块的大小。指针的操作
- p变量是指针变量。我们改变p变量的值,实际上是改变指针所指向的内存块,对指针所指向的内存块里的值没有任何影响。
- *p相当于通过地址(p变量的值)找到一块内存,然后操作内存;*p放在等号的左边赋值(写内存);*p放在等号的右边取值(读内存)
间接赋值是指针存在的最大意义
*p间接赋值成立条件:
- 2个变量(通常一个实参,一个形参)
- 建立关系,实参取地址赋给形参指针
- *p形参去间接修改实参的值
相应代码int num=0;int *p=NULL;//条件一:两个变量p=#//条件二:建立关系Num=1;*p=2;//条件三:通过*操作符,间接的给变量内存赋值
一般,我们用二级指针去跨函数修改一级指针的值;用一级指针跨函数修改普通变量的值
应用场景:
- 正常: 条件一,条件二,条件三都写在一个函数里。
- 间接赋值:条件一,条件二写在一个函数里, 条件三写在另一个函数里
- C++中,可以将1写在一个函数里,通过传引用的方式,将条件二条件三写在另一个函数里。而C中没有传引用的概念。
理解指针必须和内存四区结合起来
这一点我们在开头部分就已经说明了。
我们这里讲一下主调函数和被调函数的区别- 主调函数可把堆区、栈区、全局数据内存地址传给被调用函数
- 被调用函数只能返回堆区、全局数据
指针做函数参数,是有输入和输出特性的。通过使用函数我们能够在被调函数中传出所需的内存块。(所谓输入输出,指的是如果在主调函数中分配内存,则是输入;如果在被调函数中分配内存,则为输出)
应用指针必须和函数调用相结合
指针是子弹,函数是枪管。
接口的封装和设计、模块的划分都离不开指针。
0 0
- C提高(2)/指针
- c指针提高
- C提高(5)/二级指针
- 编程能力提高-----C/C++指针详解(2)
- C——提高(2)字符串一级指针、二级指针内存模型
- C语言提高之指针初步
- 【C语言提高11】野指针
- 【C语言提高13】二级指针
- 【C语言提高28】多级指针
- 编程能力提高-----C/C++指针详解
- C 提高之变量和指针
- C语言基础与提高之指针
- 【C语言提高35】数组指针和指针数组
- C语言提高之——C和指针总结
- 【C语言提高08】【指针铁律】铁律2:间接赋值(*p)是指针存在的最大意义
- c提高(2)
- C 语言复习与提高--- IV. 数组与指针
- C语言及程序设计提高例程-23 指针的运算
- 字符串循环右移
- 微博登录过程分析(一)基本过程
- Zabbix Agent自动注册(三)
- AlgorithmExample4
- Java基础:集合框架工具类
- C提高(2)/指针
- 打印和为N的连续正整数序列
- verilog学习笔记——串口
- CSS em rem vh vw calc() line-height 百分比
- 《OpenCV从入门到放弃》 -- 2th 图像二值化
- 系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
- 旅游规划(最短路,两重判断最优)
- 在Visual Studio中构建Node.js项目
- Java匿名内部类