gpt4 book ai didi

c - 在c中传递地址

转载 作者:行者123 更新时间:2023-11-30 21:43:32 25 4
gpt4 key购买 nike

在以下代码示例中:

  typedef struct data{
char ch;
int n;
int n2;


}DATA;


void Func3(DATA d){
int sum;
sum = d.ch + d.n;
d.ch = 'c';
d.n = 0x77;

}


void Func4(DATA &d){
int sum;
sum = d.ch + d.n;
d.ch = 'k';
//d.n = 0x88;
}
int WINAPI WinMain(HINSTANCE hlnst, HINSTANCE hprev,
LPSTR lpCmd, int nShow)
{
DATA dt;
dt.ch = 'a';
dt.n = 10;
dt.n2 = 20;
Func3(dt);
Func4(dt);

return 0;
}

Func3() 和 Func4() 是同一件事吗?这两个函数都是按引用传递的吗?这两个功能有什么区别吗?

最佳答案

您正在使用 C++ 编译器编译此代码。 DATA &d 在 C 中语法不正确。

Func 中,编译器本质上是在进入函数体之前写入 DATA d = dt

Func2中,“赋值”不会发生。 C++ 编译器将 d 设置为 dt引用。因此,对 Func2d 的更改会在调用方中反射(reflect)为对 dt 的更改。

在您的特定情况下,优化编译器会识别出这两个函数都是无操作的,因此可能会将它们编译出来。

关于c - 在c中传递地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40868612/

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