
C语言实参形参传递详解
在C语言中,实参和形参通过值传递进行交互。这意味着,在函数调用时,实参的值被复制并赋给形参。值传递、指针传递、数组传递是C语言中几种常见的传递方式。下面我们将详细探讨这些传递方式,并提供实际案例来帮助理解。
一、值传递
在C语言中,值传递是最常见的参数传递方式。在函数调用时,实参的值被复制到形参中,形参在函数内的修改不会影响实参。
1、基本概念
值传递意味着函数接收到的是实参的副本,而不是实参本身。换句话说,函数内对形参的任何修改都不会影响到实参。
2、示例代码
#include <stdio.h>
void modifyValue(int x) {
x = 100;
printf("Inside function: x = %dn", x);
}
int main() {
int a = 10;
printf("Before function call: a = %dn", a);
modifyValue(a);
printf("After function call: a = %dn", a);
return 0;
}
在这段代码中,modifyValue函数接收一个整数参数并将其修改为100。但是,主函数中的变量a在函数调用前后都保持不变,这就是值传递的典型特征。
二、指针传递
指针传递是一种更灵活的参数传递方式,它允许函数直接访问和修改实参。
1、基本概念
在指针传递中,函数接收的是指向实参的指针。这意味着函数可以通过指针直接访问和修改实参的值。
2、示例代码
#include <stdio.h>
void modifyValue(int *x) {
*x = 100;
printf("Inside function: *x = %dn", *x);
}
int main() {
int a = 10;
printf("Before function call: a = %dn", a);
modifyValue(&a);
printf("After function call: a = %dn", a);
return 0;
}
在这段代码中,modifyValue函数接收一个指向整数的指针,并将该整数修改为100。主函数中的变量a在函数调用后也被修改为100,这就是指针传递的特征。
三、数组传递
数组传递在C语言中是通过指针实现的。数组名作为函数参数时,实际上是传递了数组的首地址。
1、基本概念
当数组名作为函数参数时,传递的是数组的首地址,这使得函数可以访问和修改数组的元素。
2、示例代码
#include <stdio.h>
void modifyArray(int arr[], int size) {
for(int i = 0; i < size; i++) {
arr[i] = arr[i] + 10;
}
}
int main() {
int array[5] = {1, 2, 3, 4, 5};
int size = sizeof(array) / sizeof(array[0]);
printf("Before function call: ");
for(int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("n");
modifyArray(array, size);
printf("After function call: ");
for(int i = 0; i < size; i++) {
printf("%d ", array[i]);
}
printf("n");
return 0;
}
在这段代码中,modifyArray函数接收一个整数数组和数组的大小,并将数组中的每个元素都增加10。主函数中的数组在函数调用后也被修改,这就是数组传递的特征。
四、字符指针与字符串传递
字符串在C语言中是以字符数组的形式存储的,因此字符串传递实际上是字符数组的传递。
1、基本概念
字符指针用于指向字符串的首地址,当字符指针作为函数参数时,函数可以访问和修改字符串的内容。
2、示例代码
#include <stdio.h>
void modifyString(char *str) {
while(*str != '