总结卡片:
c的函数间通过数值来传递,不管是基本类型的变量值,还是数组的地址、指针的值,传递的都只是一个数值,这个数值拷贝到被调用函数的临时变量中。
被调用函数的临时变量得到这个值后,想怎么修改都行,但都不会影响到调用函数里面的值。
#include <stdio.h>
int power(int a, int b) {
int r;
for(r=1;b>0;b--) r=r*a;
return r;
}
int main() {
int a=2,b=10;
printf("power(2,10)==%dn", power(a,b));
return 0;
}
比如上面代码,power函数中修改了变量b,并不会影响到main函数中的变量b。
c函数没有“引用”的概念,如果想修改调用函数里面的数据,可以用数组或指针等做到,比如用数组:
#include <stdio.h>
#define MAX_LEN 1024
int line(char c[], int len) {
int rlen=0;
char ch;
while(rlen<len-1 && (ch=getchar()) != 'n') {
c[rlen++] = ch;
}
c[rlen] = ' ';
return rlen;
}
int main() {
char c[MAX_LEN];
int len = line(c,MAX_LEN);
printf("len==%dn",len);
printf("%sn", c);
return 0;
}
main调用line时,把字符数组c传递过去,实际是把数组的地址传递过去,line函数拿到数组c,就能修改到main函数中的数组的内容,因为line跟main的数组地址,指向同一个内存块。