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)
wc
是teststruct
具有自动存储的类型的实例.其他每个细节都是特定于实现的,但在大多数情况下,实现使用堆栈作为自动存储区域.
&wc
是表达式teststruct *
,导致wc
地址.
至于未提出的问题(你为什么不问它呢?):要输出结构的内容,你必须逐个输出它的成员:
cout << wc.n << ", " << wc.l << ", " << wc.str << endl;
Run Code Online (Sandbox Code Playgroud)
然而,你的代码似乎存在误解; 1.0
是文字的类型float
,也就是它的浮点数.你确定它是你想要存储在long
变量中的吗?如果你想要long
文字,请使用1L
.