指针专题

指针三大铁律

1 铁律一:指针也是一种数据类型

指针的数据类型是它所指向的内存空间的数据类型。

2 铁律二:指针变量和它所指向的内存空间是两个不同的概念

步长根据它所指向的内存空间来定。

3 铁律三:理解指针必须和内存四区概念相结合

主调函数 被调函数

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

内存分配方式

  • 指针做函数参数,是有输入输出特性的

指针存在的意义

==间接赋值成立的三个条件==

  1. 定义了一个实参变量,一个形参变量
  2. 建立关联(实参取地址传给形参)
  3. *p 形参去间接的修改实参的值

==间接赋值的应用场景有两个(代码实现层面)==

  1. *p1++ = *p2++
  2. 指针作函数参数,通过 *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 //抛砖

二级指针输出模型建立

你可能感兴趣的:(指针专题)