函数参数的值传递和引用
1. 值传递:函数将参数复制一份(实参复制给形参),函数内部操作的是形参,对实参没有影响
2. 引用:函数传入的地址,实参和形参指向同一个变量
int fun(int a) {
a = 2;
}
int fun(int *a) {
*a = 2;
}
数组退化为指针
当数组作为函数的参数,数组退化为指针,不能用sizeof来获取大小,此时sizeof获取的是指针的大小即4字节
void getArraySize(char *arr) {
printf("%d\n", sizeof(arr));
}
void getArraySize2(char arr[]) {
printf("%d\n", sizeof(arr));
}
函数返回值
1. 返回变量:在函数结束时,局部变量被释放,返回值会放入栈中的临时变量
2. 返回指针:一般返回指向堆的指针
一个典型的错误:
char *fun() {
char p[] = "ABCD";
return p;
}
函数返回了一个指针,但是在函数结束时,局部变量数组被销毁,p指向了一个被销毁的局部变量地址,内容未知
函数返回多个值
由于函数只能返回一个值,当需要返回多个值时,可以把变量指针作为函数参数传入,直接修改指针指向的值