我预期的结果是相同的。两个函数做同样的事情,但是
为什么它们不同?
我认为它与指针有关。
void changer(int n){
n = 20;
}
void arrayChanger(int n[]){
n[0] = 20;
}
int main()
{
int a = 5;
int ar[1] = {5};
changer(a);
arrayChanger(ar);
printf("%d\n",a);
printf("%d\n",ar[0]);
return 0;
}
最佳答案
除非参数被明确声明为通过引用传递,否则参数将按值传递,并且数组在传递给函数时将衰减为指向其第一个元素的指针。
函数changer
不会更新实际变量a
,因为它只接收其值,而不是变量本身。
如果要更新函数调用中的值,则需要通过引用传递它:
void make20(int *a)
{
*a = 20;
}
调用将如下所示:
int n = 5;
make20(&n);
// now n = 20
关于c - 为什么这两个函数的结果不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53619070/