结构的变量包含什么?

时间:2012-07-03 19:05:08

标签: c++ variables types struct

说我有这个简单的程序

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

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

4 个答案:

答案 0 :(得分: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"

答案 1 :(得分:5)

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

&wcteststruct *类型的表达式,会产生wc的地址。

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

cout << wc.n << ", " << wc.l << ", " << wc.str << endl;

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

答案 2 :(得分:0)

wc是在堆栈上分配的teststruct类型的对象

答案 3 :(得分:0)

teststruct的实例视为一个连续的内存区域,用于包含其成员变量的值。在打印时

    cout << &wc;

您正在输出变量的地址,即存储它的内存中的位置。这是一个简单的答案,可能充满了详细的技术错误,但你问题的性质和措辞表明它可能会给你画一幅有用的图片。