- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在下面的代码中:
#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/
我正在使用 Sympy 重现 Mathematica 结果,而我是后者的新手,所以我可能做错了。然而,我注意到一些使用 Mathematica 最多只需要一分钟的东西在 sympy 中会花费很长时间(
Kubernetes 有一个相当复杂的网络模型,它似乎是基于规避 Docker 默认网络的一个关键缺陷: 默认情况下,Docker 容器无法直接从外部世界联系,因为它们的 IP 地址对于它们所在的子网
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
以下类型检查: instance (Applicative f, Alternative f, Foldable f) => Monad f where (>>=) = flip $ \f ->
我是一名优秀的程序员,十分优秀!