c - 为什么这两个函数的结果不同?

标签 c arrays function

我预期的结果是相同的。两个函数做同样的事情,但是
为什么它们不同?
我认为它与指针有关。

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/

相关文章:

c - 说出句子中出现的元音数量

c - 仅使用指针对整数数组进行排序时的 "for"循环

javascript - 是否有可能从多个条件中返回任何一个为真的条件(以一种简单的方式)?

javascript - 无法理解函数工作中一行的使用

c - 为什么嵌套函数可以在turboc++中工作,但不能在gnug++中工作?

c - c : permission denied 中的消息

c - 在 C 循环中释放子字符串

c - 学生结构问题

c - 为什么 GCC 9.1.0 有时会提示这种 strncpy() 的使用?

php - 如何使用数组项查找所有可能的顺序