gpt4 book ai didi

c - 为什么 'z'中存储的值为35?难道不应该是20吗,因为在函数 'c=*b'中(c等于*b指向的值)?

转载 作者:行者123 更新时间:2023-11-30 20:29:24 24 4
gpt4 key购买 nike

在下面的代码中:

#include <stdio.h> 

void shuffle(int* a, int* b, int c) {
int temp = *a;
*a = *b + c;
c = *b;
*b = temp;
}

int main() {
int x = 10;
int y = 20;
int z = 35;
shuffle(&x,&y,z);
printf("x: %i\n", x);
printf("y: %i\n", y);
printf("z: %i\n", z);
return 0;
}

“z”的值仍然是 35。为什么会这样呢?该值不应该是20吗?自:

c = *b;

最佳答案

当您传递 a、b 和 c 作为参数时,您会注意到 int c 不是作为指针传递的。在 C 中,参数可以通过两种方式传递。

第一个是引用传递参数,该参数作为变量的地址传递,对该地址的内容所做的任何更改即使在函数之外也将持续存在。

第二种方法是将其作为按值参数传递,在这种情况下,您只需将“传递”变量的内容创建到另一个变量的副本。

现在,int* a 作为引用传递(因为它是一个指针),假设 a=0x12341234(a 的地址),其值为 10,再一次,int c(不是指针)的地址为 0x10101010,值为 35。然后,当我们用a作为指针,c作为普通整数来调用我们的函数时,我们可以发现函数内部a的地址是0x12341234,但是c的地址现在是0x20202020(例如)。我们在内存的另一个地方创建了 c 的副本。修改复制的变量不会修改原始变量。这就像:

int original = 20;
int copy = original;//we see that copy is a COPY of original
copy = 321;//Original still being 20

关于c - 为什么 'z'中存储的值为35?难道不应该是20吗,因为在函数 'c=*b'中(c等于*b指向的值)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258465/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com