加载中...

指针和地址变量

理解指针和地址变量的区别,以及如何正确进行函数传参

指针和地址变量的区别:

  1. 指针是一种变量,它存储的是另一个变量的地址(内存地址)。指针通过存储地址来间接操作某个变量。2. 地址变量是存储某个变量地址的普通变量。它直接存储地址这个数值。例如:
int a = 10; 
int *p = &a;  // p是指针,存储a的地址 
int addr = &a; // addr是地址变量,存储a的地址

这里p是指针,addr是地址变量,它们都存储了变量a的地址,用于操作a。区别在于:- 指针被定义为指针类型,用于通过间接操作指向的变量。
- 地址变量被定义为普通变量,用于直接操作地址这个数值。正确的函数传参:1. 当我们需要函数修改某个变量时,应传递该变量的地址作为参数。这是因为函数内部不能修改外部变量本身,只能修改其地址访问到的变量。例如:

void add1(int *n) {
    *n += 1;  // 通过地址修改n的值
}

int main() {
    int n = 0;
    add1(&n);  // 传地址
    printf("%d\n", n); // 1
}
  1. 当我们需要函数返回某个变量的值时,也应传递其地址。这是因为函数只能返回局部变量,无法直接返回外部变量。通过地址我们可以修改外部变量,实现“返回”其值的效果。例如:
void getValue(int *ret) {
    *ret = 10;  // 通过地址给ret赋值,实现"返回"值 
}

int main() {
    int ret;
    getValue(&ret);
    printf("%d\n", ret); // 10
}
  1. 如果我们不需要函数修改外部变量,只需要读取,则可以直接传变量本身的副本。这是因为函数会在内部创建一个副本,操作这个副本不会影响外部变量。例如:
void print(int n) {
    printf("%d\n", n); 
}

int main() {
    int n = 10;
    print(n);  // 直接传值,打印10 
    printf("%d\n", n); // n仍为10
} 

所以总结来说,正确的函数传参应遵循:- 如果需要修改或返回外部变量的值,传其地址
- 如果只需要读取外部变量,直接传值
- 明确指针与变量的区别,理解通过地址操作变量

posted @ 2023-05-22 14:48  ChuenSan  阅读(67)  评论(0编辑  收藏  举报