指针的本质分析

发布时间 2023-04-06 00:01:06作者: 嵌入式小白—

程序中的变量实际是存储空间的别名。,通常以 *+ 变量名的形式组成。

  • 变量名: 存储参数的地址。
  • * :类似钥匙一样,作为打开存储内存的地址,并取出存储参数的值。
int i = 1;
int *p = &i;    // p---&i,   *p ----1

指针变量虽然是指向变量存储的空间地址,其本质还是变量,所以依然可以对其进行取地址,这就是后面我们所学到的双指针或多层数组。

传值调用和传址调用:

函数的参数也可为指针,如果函数内部需要修改实参,则需要指针的方式将实参以参数地址的方式传入函数。

// 传值调用
int swap(int a, int b){
    int c = a;
    a = b;
    b = c;  
}
// 上述方式只是简单的将参数值传入到了函数内部,并未修改参数所在地址的参数值,如果函数内部不需要修改实参,而是将其作为运算或逻辑判断的标志,则可用上述方法。

// 传址调用
int swap(int *a, int *b){
    int *c = *a;
    *a = *b;
    *a = *c;
}
// 上述的这种方法,是将实参的地址传入到了函数内,这种常用于对实参重新赋值

 

常量与指针:

前面提到的指针本质还是变量,而只要是变量就可以通过const修饰指针,将其变为常量。