C语言的形参有副本和没副本怎么创建
时间: 2024-04-16 07:26:45 浏览: 122
c语言的形参和实参传递的区别详解
5星 · 资源好评率100%
在C语言中,函数的形参默认是通过值传递(pass by value)的方式进行传递的,即会创建实参的副本并将副本传递给函数。如果你想要在函数内部修改原始实参的值,可以通过传递指针作为形参来实现。
下面是两种常用的创建副本和不创建副本的方法:
1. 创建副本:
```c
void func(int num) {
num = 20; // 修改形参num的值
}
int main() {
int a = 10;
func(a); // 将a的副本传递给函数
printf("%d", a); // 输出 10,a的值未被修改
return 0;
}
```
2. 不创建副本,通过指针传递实参的地址:
```c
void func(int* num) {
*num = 20; // 修改指针所指向的值
}
int main() {
int a = 10;
func(&a); // 将a的地址传递给函数
printf("%d", a); // 输出 20,a的值被修改
return 0;
}
```
在第二种情况中,通过传递指针作为形参,函数可以直接访问和修改实参的值。但需要注意,在使用指针时,需要确保指针不为空,并且要小心处理指针的生命周期和访问权限,以避免出现悬空指针或非法访问的情况。
阅读全文