C语言函数传参
时间: 2025-05-01 21:40:19 AIGC 浏览: 44
### C语言函数传参的方法与机制
在C语言中,函数传参的核心在于理解两种主要的参数传递方式:值传递和指针传递。这些方法直接影响程序的行为以及内存管理。
#### 1. **值传递**
值传递是指将实际参数的副本传递给形式参数[^1]。这种方式下,函数内部对形参所做的任何更改都不会影响到原始的实际参数。这是因为实参与形参位于不同的存储位置,形参仅持有实参的一个临时拷贝[^4]。
以下是值传递的一个示例:
```c
void modifyValue(int num) {
num += 10;
}
int main() {
int value = 5;
modifyValue(value);
printf("%d\n", value); // 输出仍为5,因为num是value的副本
return 0;
}
```
#### 2. **指针传递**
指针传递允许函数操作原始数据本身,而不是其副本。在这种情况下,实际参数是一个指向变量地址的指针,而形式参数则接收该地址并对其进行间接访问[^2]。这使得函数能够修改外部作用域中的变量值[^5]。
下面展示了一个使用指针传递的例子:
```c
void incrementByPointer(int *ptrNum) {
(*ptrNum)++;
}
int main() {
int number = 7;
incrementByPointer(&number);
printf("%d\n", number); // 输出8,因*ptrNum直接改变了number的内容
return 0;
}
```
#### 3. **复杂情况——指针的指针**
有时需要改变指针本身的值而非它所指向的对象,则可以采用“指针的指针”的技术[^3]。此模式常见于动态分配内存的情境之中。
考虑如下代码片段:
```c
#include <stdio.h>
#include <stdlib.h>
void allocateMemory(char **ppStr, int size) {
*ppStr = malloc((size + 1) * sizeof(char));
if(*ppStr != NULL){
*(*ppStr + 0) = 'A';
*(*ppStr + 1) = '\0';
}
}
int main(){
char *strPtr = NULL;
allocateMemory(&strPtr, 10);
if(strPtr != NULL){
puts(strPtr); // 应打印"A"
free(strPtr);
}
return 0;
}
```
上述例子展示了如何通过双重指针实现对外部指针变量赋新值的功能。
---
### 总结
综上所述,C语言提供了灵活多样的函数参数传递手段,其中最基础也是最重要的就是值传递和指针传递。每种方式都有特定的应用场合及其优缺点。合理选用合适的传参策略对于编写高效、安全的软件至关重要。
阅读全文
相关推荐



















