在C ++中初始化Structs,然后通过引用传递检索

时间:2018-03-18 13:53:44

标签: c++

我正在尝试以下面的方式初始化结构,然后通过引用传递它,然后尝试检索值。但是,我得到一个随机数字,这似乎表明我在该地址没有任何东西。为什么会这样?

#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();
} 

1 个答案:

答案 0 :(得分:3)

int main() {
    struct newStruct initializer;

在这里,您要定义一个名为newStruct的{​​{1}}类型的未初始化的本地变量;它与您在上面定义的名为initializer的全局变量无关,并且具有相同的名称,本地实际上隐藏了全局变量(当您执行非限定名称查找时)。

要访问全局变量,请避免定义具有相同名称的本地变量。

initializer

您也可以通过使用范围解析运算符明确限定它来引用隐藏的全局(例如,int main() { printStruct(&initializer); ),但我不认为这就是您在此之后的情况。

顺便说一句,这是C ++而不是C,当您引用类型名称时,您不必使用::initializer关键字作为前缀newStruct