我正在尝试以下面的方式初始化结构,然后通过引用传递它,然后尝试检索值。但是,我得到一个随机数字,这似乎表明我在该地址没有任何东西。为什么会这样?
#include <iostream>
using namespace std;
struct newStruct {
int numberOne;
int numberTwo;
int numberThree;
};
newStruct initializer{
1,2,3
};
void printStruct(struct newStruct* inputNew) {
printf("This is the output %d\n", inputNew->numberOne );
printf("This is the second output %d\n", inputNew->numberTwo);
printf("This is the third output %d\n", inputNew->numberThree);
}
int main() {
struct newStruct initializer;
printStruct(&initializer);
getchar();
}
答案 0 :(得分:3)
int main() {
struct newStruct initializer;
在这里,您要定义一个名为newStruct
的{{1}}类型的未初始化的本地变量;它与您在上面定义的名为initializer
的全局变量无关,并且具有相同的名称,本地实际上隐藏了全局变量(当您执行非限定名称查找时)。
要访问全局变量,请避免定义具有相同名称的本地变量。
initializer
您也可以通过使用范围解析运算符明确限定它来引用隐藏的全局(例如,int main() {
printStruct(&initializer);
),但我不认为这就是您在此之后的情况。
顺便说一句,这是C ++而不是C,当您引用类型名称时,您不必使用::initializer
关键字作为前缀newStruct
。