在C语言中,参数传递主要有两种方式:值传递和地址传递。
值传递
定义:将实际参数的值复制给形式参数。
特点:形式参数的改变不会影响到实际参数。
示例:
```c
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(3, 5);
printf("result = %d\n", result); // 输出 result = 8
return 0;
}
```
地址传递
定义:将实际参数的地址传递给形式参数。
特点:形式参数的改变会影响到实际参数。
示例:
```c
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 3, y = 5;
swap(&x, &y);
printf("x = %d, y = %d\n", x, y); // 输出 x = 5, y = 3
return 0;
}
```
此外,C语言还支持通过命令行参数传递参数给`main`函数。`main`函数的参数`argc`和`argv`分别表示参数的个数和指向字符指针的数组,每个字符指针指向一个参数字符串。
示例:
```c
include
int main(int argc, char *argv[]) {
printf("参数个数: %d\n", argc);
printf("参数列表:\n");
for (int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
return 0;
}
```
运行上述代码时,可以通过以下命令行参数传递:
```sh
./a.out arg1 arg2 arg3
```
输出将会是:
```
参数个数: 4
参数列表:
./a.out
arg1
arg2
arg3
```
总结:
值传递:适用于传递简单数据类型,如整型、浮点型等。
地址传递:适用于需要修改实参或者传递大数据结构(如结构体)的情况。
命令行参数:通过`main`函数的`argc`和`argv`参数获取命令行传入的参数。