使用`&`和`(int*)`打印char*有什么区别?

lol*_*lol 1 c++ arrays pointers

我正在学习OOP课程,但我是C++的新手.我的导师向我们介绍了C++中的字符数组.他说,要在C++中获取字符数组的基址,可以使用以下任一方法:

char* a = "Test String";
cout << &a; // Prints base address of char array
Run Code Online (Sandbox Code Playgroud)

要么

char* a = "Test String";
cout << (int*)a;
Run Code Online (Sandbox Code Playgroud)

但当我尝试两个相同的char数组时,我得到了不同的结果.两者有什么区别?

Ser*_*eyA 12

改变教练.这是无稽之谈.第一个片段采用指针的地址(而不是字符数组).第二个片段将char指针转换为指针int并打印转换后的指针.

这样做的可能原因是,如果您尝试打印指针char,编译器将选择一个特殊的重载operator <<并打印字符串而不是指针.但是,我宁愿把它转换void*int*.原因是转换void*可以更安全地完成static_cast.

  • 我想补充一点,转换为`void*'更安全,因为你不会错误地取消引用它.它应该是`const char*`和`const void*`. (2认同)