c语言传入数组
今天在写一个编辑二进制文件的程序时回想到了这个知识点,就是函数某个函数内使用并改变其他函数的变量。本来是可以用全局变量的方式快速解决的,但还是觉得全局变量能不用尽量不用,养个好习惯。
我比较习惯用这两种写法来传变量给函数:
1)最简单的,直接传进来这个变量,但无法更改原来的变量本身,因为函数运行完其内存就清掉了
void CaoZuo(int i) { i -= 2; printf("%d", i); // A处 } int main() { int i; CaoZuo(i); printf("%d", i);// B处 }
比如主函数内i为5,那么A处是3但B处还是5
2)但是如果传入的是原先变量的地址就不一样了,因为主函数只运行到一半所以内存不会清掉,在CaoZuo函数内改变地址里的值是可行的
void CaoZuo(int *i) { *i -= 2; printf("%d", *i); // A处 } int main() { int i; CaoZuo(&i); printf("%d", i);// B处 }
这里传入CaoZuo函数的是主函数中i的地址,在函数内是对地址存储的值来操作,这样A处和B处都会是3
这两个方法都是实用的,要看子函数内是只需要知道变量是多少还是要改变变量本身
有点小意思了,我们接下来看数组的传入:
int main() { int a[5] = {'2', '3', '6', '4', '9'}; BuGaiBian(a); printf("%d", a[1]); // A处 Gaibian(a); printf("%d", a[1]); // B处 } void BuGaiBian(int arr[]) { arr[1] = 5; } void GaiBian(int *arr) { arr[1] = 5; }
A处仍然是3,B处就是5了
浙公网安备 33010602011771号