结构的变量包含什么?

Sug*_*ara 1 c++ variables struct types

说我有这个简单的程序

#include <iostream>
using namespace std;

struct teststruct
{
   int n;
   long l;
   string str;
};

int main()
{
   teststruct wc;

   wc.n = 1;
   wc.l = 1.0;
   wc.str = "hello world";

   //cout << wc << endl; // what is wc by itself?
   cout << &wc;  // contains the memory address to the struct?
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想了解wc中的内容?当我声明一个变量名为wc的结构类型时; 什么是wc?它是指向内存地址的指针吗?我试图cout内容,但代码给了我一个错误.你能澄清一下wc是什么吗?

Mik*_*our 10

什么是wc?它是指向内存地址的指针吗?

不,它是一个足够大的存储块,可以包含所有成员teststruct.

在这种情况下,它具有自动存储,这意味着它可以持续与包含它的代码块一样长 - 在这种情况下,直到结束main().存储位置的详细信息是特定于实现的,但实际上它通常存储在线程堆栈的临时区域(堆栈帧),在函数开始时创建,在函数退出时销毁.

成员在该存储中的确切详细信息也是特定于实现的.

我试图cout内容,但代码给了我一个错误.

这仅适用于<<运算符重载的类型.标准库为所有基本类型和指针以及某些库类型(如std::string; 但是如果你想要支持你自己的类型,那么你需要提供自己的重载,例如:

std::ostream & operator<<(std::ostream & s, teststruct const & t) {
    return s << t.n << ',' << t.l << ',' << t.str;
}

cout << wc << endl; // prints "1,1,hello world"
Run Code Online (Sandbox Code Playgroud)


Gri*_*wes 5

wcteststruct具有自动存储的类型的实例.其他每个细节都是特定于实现的,但在大多数情况下,实现使用堆栈作为自动存储区域.

&wc是表达式teststruct *,导致wc地址.

至于未提出的问题(你为什么不问它呢?):要输出结构的内容,你必须逐个输出它的成员:

cout << wc.n << ", " << wc.l << ", " << wc.str << endl;
Run Code Online (Sandbox Code Playgroud)

然而,你的代码似乎存在误解; 1.0是文字的类型float,也就是它的浮点数.你确定它是你想要存储在long变量中的吗?如果你想要long文字,请使用1L.