当我编译并运行这个C ++代码时,我没有得到我期望的输出。
#include <iostream>
using namespace std;
int main()
{
int * i = new int;
long * l = new long;
char * c = new char[100];
float * f = new float[100];
cout << "i " << i << endl;
cout << "l " << l << endl;
cout << "c " << c << endl;
cout << "f " << f << endl;
delete i;
delete l;
delete []c;
delete []f;
cin.get();
return 0;
}
在unix机器上我得到了
i 0x967f008
l 0x967f018
c
f 0x967f090
在Windows机器上,c的值打印为一行随机字符。
请有人解释为什么它没有正确打印char数组的指针。
由于
答案 0 :(得分:19)
operator <<
std::ostream
和std::wostream
以特殊方式定义了char指针(char*
,const char*
,wchar_t*
和{{1}打印出以空字符结尾的字符串。这使您可以编写
const wchar_t*
并在你的标准输出上看到一个很好的字符串。
要获取指针值,请转换为const char* str = "Hello, World";
std::cout << str;
void *
答案 1 :(得分:4)
operator<<
的{{1}}已超载。它会考虑您正在尝试打印C风格的字符串,并打印所有字符,直到找到char*
。由于你没有初始化分配的内存,它会打印掉随机垃圾。
答案 2 :(得分:0)
由于c指向的char中没有初始化,因此您会转储一些随机内存值,直到找到值为0的值。它有时会崩溃,直到您的可读内存完成时才会找到零。在Unix中以及在任何其他操作系统中编写这样的代码是被禁止的和错误的。
答案 3 :(得分:0)
char *实际上是一个C字符串。所以我猜它是试图将它打印成一个字符串。
强制打印指针地址的一种方法是使用printf:
printf("%p\n", c);