为什么我需要将变量指向结构
Why do I need to point a variable to a structure
在下面的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';
}
这不是。
有人可以简单地解释
为什么我不能在底部代码上使用padStruct *s = s = {0,0,"),否则在顶部工作时,否则我会得到错误C2078 C2078太多的初始化器<</em> |
更重要的是,为什么我必须创建一个填充变量S,然后再创建一个PADSTRUCT *S2,然后必须将S2指向S?否则我会得到错误C2228:'.buttonid'的左侧必须具有类/struct/union/em> 。
非常令人困惑。也许至少解释了第二个问题有点容易,所以它沉入了。谢谢
为什么我不能初始化
padStruct *s = {0, 0, "")
因为s
是指指针,而不是复合类型。它可以以您的方式初始化为零,也可以将其指向padStruct
的新实例的指针,但它是一个项目。
为什么我必须创建一个
padStruct
变量s
,然后是padStruct *s2
,然后必须将s2
指向s
?
您需要初始化s2
指针以指向padStruct
的实例。将其指向s
是一种选择,但是还有其他选项。例如,您可以写
padStruct *s = new padStruct { 0, 0, "" };
甚至
padStruct *s = new padStruct { 3, 1200, "play song" };
避免一个一个一个一个。
请注意,您可以使用s->buttonID
语法代替(*s).buttonID
。
在第一个块上,您定义了一个实际的padStruct s
对象,并定义另一个简单 Pointer s2
to padStruct
。
padStruct s = {0,0,""}, *s2
对于s2 = &s
,将s2
指向s
没错,s2
指针s
的地址,该地址是在堆栈中分配的。因此,当您通过(*s2).buttonID
取消s2
时,该值实际上来自s
。(与s.buttonID
相同)
在下一个块上,您要做的是initialize a pointer with {0}
。这是错误的。指针应初始化为0
或nullptr
。{0}
仅适用于POD struct
。
padStruct *s = {0};
您需要为s
(例如padStruct *s = new padStruct
)准备空间,然后s
实际上将指向真实的东西。并记住在最后删除它。
- 在类构造函数中使用结构变量
- 在类构造函数中定义结构变量的参数
- 为什么我们再次从结构对象创建结构变量?
- 如何从其他结构访问受保护的结构变量
- 指向结构变量的指针未保存到eeprom
- 为什么我的程序没有更改结构变量中的值?
- 在 CPP 中初始化 typedef 结构变量
- 带有大结构变量的 CUDA 内核函数给出了错误的结果
- 有没有办法初始化不涉及编写构造函数的新结构变量?
- 结构变量查询
- 在结构声明的分号之前声明的结构变量是否为全局变量
- C++ 如何访问指针的结构变量
- 使用指向结构变量成员的指针访问该结构的成员的地址
- 为什么在 sizeof() 函数中与 * 运算符一起使用和不使用 * 运算符时,指向结构变量的指针大小会有所不同?
- 如何在类别内的类中访问类中的结构变量
- 尝试使用文本文件初始化多个结构变量
- 从类对象到结构变量的 memcpy
- C++结构变量初始化时出现问题
- 如何在 C++ 中使用带有类/结构变量的列表
- 动态数组添加元素而不创建结构变量/对象