二级指针作为形参为什么能改变实参的地址
时间: 2023-11-30 07:04:25 浏览: 92
指针做形参做局部变量以及内存分配
二级指针作为形参能够改变实参的地址是因为它可以通过间接引用访问到实参指针的地址,从而修改实参指针所指向的地址。
在C语言中,函数参数传递是按值传递的,即函数接收到的是实参的副本。当我们使用一级指针作为形参时,实参的地址是以值的方式传递给形参,所以在函数内部修改形参指针的值不会影响到实参指针的地址。
而当我们使用二级指针作为形参时,函数接收到的是实参指针的地址的副本,在函数内部通过间接引用操作可以访问到实参指针的地址,从而修改实参指针所指向的地址。因此,通过二级指针作为形参可以改变实参的地址。
下面是一个示例代码,演示了使用二级指针作为形参改变实参地址的情况:
```c
#include <stdio.h>
void changePointer(int** ptr) {
int* newPtr = NULL;
*ptr = newPtr;
}
int main() {
int* ptr = malloc(sizeof(int));
*ptr = 10;
printf("Before change: %p\n", (void*)ptr);
changePointer(&ptr);
printf("After change: %p\n", (void*)ptr);
free(ptr);
return 0;
}
```
输出结果为:
```
Before change: 0x7ffeedc49d50
After change: (nil)
```
可以看到,通过传递二级指针作为形参,函数内部将实参指针的地址设置为NULL,从而改变了实参的地址。
阅读全文