C语言中我的引用传递代码为何未生效?求排查与修复方案
问题原因
- 普通变量
a传递给set_int时是值传递:函数里的x是a的独立副本,修改x只会改变副本的值,原变量a不会受到影响,所以输出里a还是初始的10。 - 数组
b传递给set_array时,C语言会自动将数组名转换为指向首元素的指针,函数里的array本质是int*类型,修改array[0]直接操作的是原数组的内存空间,所以b[0]能被改成22。
修复方案(若需修改普通变量的值)
要让函数能修改普通变量,得用指针传递,把变量的地址传给函数,通过指针访问原变量的内存:
修改后的完整代码:
#include <stdio.h> void set_array(int array[4]); void set_int(int *x); int main(void) { int a = 10; int b[4] = { 0, 1, 2, 3 }; set_int(&a); // 传入a的地址 set_array(b); printf("%d %d\n", a, b[0]); } void set_array(int array[4]) { array[0] = 22; } void set_int(int *x) { *x = 22; // 解引用指针,修改原变量的值 }
运行这段代码,输出会是22 22,符合修改原变量的预期。
内容的提问来源于stack exchange,提问作者Pallavi
相关产品推荐
相关产品推荐

