gpt4 book ai didi

C++ 传递结构地址

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:46 27 4
gpt4 key购买 nike

我对将结构传递给函数有点困惑。我理解指针和一切。

但是例如:

struct stuff
{
int one
int two
};

int main{
stuff fnc;
fnc.two = 2;
fnc.one = 1;
multiply(&fnc);

}

void multiply(const stuff * pm){
cout << pm->one * pm->two;
}

首先......我什至做对了。其次,为什么我们在传递函数时使用地址运算符,而在实际函数调用中使用 * 指针运算符?我很困惑?

最佳答案

是的,除了 struct stuff 定义中缺少分号外,您的代码是可编译的。我不是很清楚你问的关于传递函数和实际函数调用的确切内容,但我想你想知道为什么函数调用使用 &fnc,但参数是 东西*pm?在那种情况下,声明的 fnc 变量是一个普通的 stuff。它不是指针,它指的是该结构的实际实例。

现在 multiply 函数被声明为接受一个 stuff* —— 一个指向 stuff 的指针。这意味着您不能直接传递 fnc -- 它是一个 stuffmultiply 需要一个 *stuff。但是,您可以通过使用 & 运算符获取地址将 fnc 作为 stuff* 传递,并且 &fnc 是有效的 stuff * 可以传递给 multiply

进入multiply 函数后,您现在就有了一个名为pmstuff*。要从此 stuff* 中获取 onetwo 变量,您可以使用指向成员运算符的指针 (-> ) 因为它们是指向 stuff 而不是普通的 stuff 的指针。在获得这些值(pm->onepm->two)之后,代码将它们相乘,然后打印出来(pm->one * pm ->两个).

关于C++ 传递结构地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4751574/

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