指针三大铁律
1 | 铁律一:指针也是一种数据类型 |
---|
指针的数据类型是它所指向的内存空间的数据类型。
2 | 铁律二:指针变量和它所指向的内存空间是两个不同的概念 |
---|
步长根据它所指向的内存空间来定。
3 | 铁律三:理解指针必须和内存四区概念相结合 |
---|
主调函数 被调函数
- 主调函数可把堆区、栈区、全局区数据内存地址传给被调用函数
- 被调用函数只能返回堆区、全局数据
内存分配方式
- 指针做函数参数,是有输入输出特性的
指针存在的意义
==间接赋值成立的三个条件==
- 定义了一个实参变量,一个形参变量
- 建立关联(实参取地址传给形参)
- *p 形参去间接的修改实参的值
==间接赋值的应用场景有两个(代码实现层面)==
- *p1++ = *p2++
- 指针作函数参数,通过 *p 形参间接的修改实参的值,这才是指针存在的最大意义
这是C语言特有的现象,而这才是指针的精华
来看一个简单的例子
//指针做函数参数,通过形参把函数外的实际参数修改了,这才是指针的意义
int getNum(int *p)
{
if(p == NULL)
return -1;
*p = 40;
}
==指针做函数参数==
函数调用过程中
- 用1级指针(通常是形参)去修改0级指针(通常是实参)的值
- 用2级指针(通常是形参)去修改1级指针(通常是实参)的值
- 用3级指针(通常是形参)去修改2级指针(通常是实参)的值
- ......
- 用8级指针(通常是形参)去修改7级指针(通常是实参)的值
- ......
- 用n级指针(通常是形参)去修改n-1级指针(通常是实参)的值
- ......
函数调用时,形参传给实参,用实参取地址,传给形参,在被调用函数里面用*p,
来改变实参,把运算结果传出来。
指针作为函数参数的精髓。
*p间接赋值是指针存在的最大意义(现实意义)
==总结,间接赋值的应用场景的三种形式(基于间接赋值成立的三个条件):==
- 123 写在一个函数里面,那么成了第一个应用场景
- 12 3 //间接赋值是指针存在的最大意义
- 1 23 //抛砖