形参、实参
C语言参数出现在两个地方–函数定义处、函数调用处。
函数定义处的参数是形式参数,只用在函数调用时才分配内存,函数调用完成后释放内存,简称形参。
函数调用处的参数是实际参数,可以是常量、变量、地址(指针、数组)等。在函数调用时实参把值单向传递给形参,形参参与运算,实参本身不参与运算。
在被调函数中,若只是改变形参的值,函数调用完成后形参被释放,这时不会改变实参的值。
在被调函数中,若通过形参指针改变指针指向变量的值时,实参的值会被修改。
#include <stdio.h>
int fun(int a, int *b) {
a++;
(*b) = (*b) + 1;
return a;
}
int main(void) {
int a = 0, b = 0;
printf("a=%d b=%d\n", a, b);
printf("fun_a=%d b=%d\n", fun(a,&b), b);
printf("a=%d b=%d\n", a, b);
system("pause");
return 0;
}
实参a的值在函数调用前后并未改变,在函数调用过程中改变了。
实参b的值在函数调用过程中改变了指针指向变量的值,实参b的值确实被改变了。
所以,在函数调用过程中,使用指针可以改变实参。
至于为什么第二个printf时b的值为0,我猜测是预读? 有大佬知道请不吝赐教。