2012-05-30 170 views
0

为什么这个代码不显示任何输出:相反,如果我们用为什么没有输出显示

cout << &s1.f 

cout << &s1.i 

给出了正确的输出。

# include <iostream> 
using namespace std; 

struct s 
{ 
char c; 
int i; 
float f; 

}s1; 

int main() 
{ 
cout << &s1.c; 
} 
+4

你还没有初始化任何东西。 – chris

+0

为什么需要初始化? cout << &s1.i;会给出正确的输出。 –

+0

@DeveshAgrawal,我的坏。我误解了这个问题,并没有意识到它首先会被初始化为0。看到答案。 – chris

回答

5

有,需要一个char*并将其显示为一个空终止字符串的operator<<过载。如果要显示指针地址,请将指针指向void*

+0

哦,太棒了!铸造无效*给出确切的答案。购买为什么cout <<&s1.i没有铸造给出正确的答案。 –

+0

@DeveshAgrawal,'int *'没有特殊的重载,就像'char *'一样。 char *代表一个字符串,所以他们为它提供了一个重载操作符。一个'int *'没有特别的意义。 – chris

+0

kool !!非常感谢!! –

2

c的地址使类型为char*,这将被解释为空终止的字符串。全局变量默认初始化为零,意味着c将被解释为空字符串,因此不会打印任何内容。