gpt4 book ai didi

c - C 中引用传递的工作原理

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

我有两个具有不同输出的代码。需要一个很好的解释,它如何在内存中工作。

#include "stdafx.h"

int *fun(int *j)
{
*j++;
return j;
}

int _tmain(int argc, _TCHAR* argv[])
{
int i = 10;
int *j,*k;
j = &i;
k = fun(j);
printf("Now the value = %d",i);
printf("Now the value = %d",*j);
printf("Now the value = %d",*k);
return 0;
}

这里的输出是:10,10 和 -(某个值)。

如果我像下面这样更改括号:

#include "stdafx.h"

int *fun(int *j)
{
(*j)++;
return j;
}

int _tmain(int argc, _TCHAR* argv[])
{
int i = 10;
int *j,*k;
j = &i;
k = fun(j);
printf("Now the value = %d",i);
printf("Now the value = %d",*j);
printf("Now the value = %d",*k);
return 0;
}

这里的输出是:11,11,11

这是我在 Visual studio 中做的。请给出一个很好的解释。谢谢。

最佳答案

这里的问题是operator precedence 。由于后缀 ++ 运算符的优先级高于解引用运算符 *,因此增量是在指针上完成的,而不是在解引用的值上完成的。

因此该函数返回增加的指针,该指针现在指向其他地方,因此 main 中对 k 的取消引用将是未定义的行为。

关于c - C 中引用传递的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22172127/

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