指针值传递与地址传递
时间: 2023-08-28 20:11:04 浏览: 61
指针值传递和地址传递是两种不同的概念。在C语言中,函数参数可以通过值传递或地址传递来传递给函数。
指针值传递是指将指针变量作为参数传递给函数,函数中对指针所指向的内存进行操作。这种方式下,函数内部对指针的修改不会影响到原始的指针变量。但是,函数中对指针所指向的内存的修改会影响到原始内存。
地址传递是指将变量的地址作为参数传递给函数。这种方式下,函数内部对地址所对应的变量进行操作,会直接影响到原始变量的值。通过地址传递,可以实现在函数内部对原始变量进行修改。
下面是一个示例代码,展示了指针值传递和地址传递的区别:
```c
#include <stdio.h>
// 指针值传递
void pointerValuePass(int* ptr) {
*ptr = 10; // 修改指针所指向的内存
ptr = NULL; // 修改指针本身不会影响原始指针
}
// 地址传递
void addressPass(int* ptr) {
*ptr = 20; // 修改地址对应的变量
ptr = NULL; // 修改指针本身不会影响原始指针
}
int main() {
int num = 0;
int* ptr = #
printf("Before pointerValuePass: num = %d\n", num);
pointerValuePass(ptr);
printf("After pointerValuePass: num = %d\n", num);
printf("Before addressPass: num = %d\n", num);
addressPass(&num);
printf("After addressPass: num = %d\n", num);
return 0;
}
```
输出结果为:
```
Before pointerValuePass: num = 0
After pointerValuePass: num = 10
Before addressPass: num = 10
After addressPass: num = 20
```
可以看到,指针值传递修改了指针所指向的内存,但没有修改原始指针的值;而地址传递直接修改了原始变量的值。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)