gpt4 book ai didi

c++ - 为什么我需要将一个变量指向一个结构

转载 作者:搜寻专家 更新时间:2023-10-31 02:12:49 25 4
gpt4 key购买 nike

在下面的 2 个代码示例中(下面的第一个代码块有效,第二个较低的代码块无效)

#include <iostream>
#include <vector>
#include <string>

struct padStruct
{
int buttonID;
long timeMS;
std::string codetoSEND;
};

int main()
{
padStruct s = {0,0,""}, *s2;
s2 = &s;
s.buttonID = 3; //or (*s2).buttonID = 3;
s.timeMS = 1200; //or (*s2).timeMS = 1200;
s.codetoSEND = "play song"; //or (*s2).codetoSEND = "play song";
std::cout << (*s2).buttonID << ',' << (*s2).timeMS << ',' << '"' << (*s2).codetoSEND << '"' << '\n';
}

这有效。

相对于:

#include <iostream>
#include <vector>
#include <string>

struct padStruct
{
int buttonID;
long timeMS;
std::string codetoSEND;
};

int main()
{
padStruct *s = {0};
//padStruct *s = {0,0,""} //Error C2078 too many initializers
(*s).buttonID = 3; //or (*s2).buttonID = 3;
(*s).timeMS = 1200; //or (*s2).timeMS = 1200;
(*s).codetoSEND = "play song"; //or (*s2).codetoSEND = "play song";
std::cout << (*s).buttonID << ',' << (*s).timeMS << ',' << '"' << (*s).codetoSEND << '"' << '\n';
}

这不是。

谁能简单解释一下

  1. 为什么我无法在底部代码上初始化 padStruct *s = {0,0,"") 而它在顶部代码上运行,否则我会得到一个错误 C2078 初始化程序过多|

  2. 更重要的是,为什么我必须创建一个 padStruct 变量 s,然后创建一个 padStruct *s2,然后必须将 s2 指向 s?否则我会得到一个error C2228: left of '.buttonID' must have class/struct/union

非常困惑。也许至少解释第二个问题有点简单,这样就可以理解了。谢谢。

最佳答案

Why I can't initialize padStruct *s = {0, 0, "")

因为s是指针,不是复合类型。它可以按照您的方式初始化为零,或者指向指向 padStruct 新实例的指针,但它是单个项目。

why I have to create a padStruct variable s and then a padStruct *s2 and have to then point s2 to s?

您需要初始化s2 指针以指向padStruct 的实例。将它指向 s 是一种选择,但还有其他选择。例如,你可以这样写

padStruct *s = new padStruct { 0, 0, "" };

甚至

padStruct *s = new padStruct { 3, 1200, "play song" };

避免一一设置字段。

请注意,您可以使用 s->buttonID 语法代替 (*s).buttonID

关于c++ - 为什么我需要将一个变量指向一个结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42239563/

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