首页 > 学院 > 开发设计 > 正文

C提高(2)/指针

2019-11-06 07:07:33
字体:
来源:转载
供稿:网友

我们在之前的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中没有传引用的概念。

理解指针必须和内存四区结合起来 这一点我们在开头部分就已经说明了。 我们这里讲一下主调函数和被调函数的区别

主调函数可把堆区、栈区、全局数据内存地址传给被调用函数被调用函数只能返回堆区、全局数据

指针做函数参数,是有输入和输出特性的。通过使用函数我们能够在被调函数中传出所需的内存块。(所谓输入输出,指的是如果在主调函数中分配内存,则是输入;如果在被调函数中分配内存,则为输出)

应用指针必须和函数调用相结合 指针是子弹,函数是枪管。 接口的封装和设计、模块的划分都离不开指针。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表