先給出經過字符型指針輸出字符串的示例代碼,以下:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
const char *pszStr = "this is a string";
// 輸出字符串
cout << "字符串:" << pszStr << endl;
// 顯然不會輸出地址值
cout << "字符串起始地址值: " << pszStr << endl;
return 0;
}
對於要使用cout輸出字符串指針地址值,咱們可能會產生困惑。曾經咱們使用C標準庫中的printf函數是如此的方便:
#include <stdio.h>
int main()
{
const char *pszStr = "this is a string";
// 輸出字符串
printf("字符串:%s\n", pszStr);
// 輸出地址值
printf("字符串起始地址值:%p\n", pszStr);
return 0;
}
兄弟,醒醒吧,我們要寫的是C++代碼,不要老是抓着C不放嘛。好了,咱們來分析一下,因爲C++標準庫中I/O類對<<操做符重載,所以在遇到字符型指針時會將其看成字符串名來處理,輸出指針所指的字符串。既然這樣,那麼咱們就別讓它知道那是字符型指針,因此得用到強制類型轉換,不過不是C的那套,咱們得用static_cast來實現,把字符串指針轉換成無類型指針,這樣更規範,以下:
#include <iostream>
using std::cout;
using std::endl;
int main()
{
const char *pszStr = "this is a string";
// 輸出字符串
cout << "字符串:" << pszStr << endl;
// 如咱們所願,輸出地址值
cout << "字符串起始地址值: " << static_cast<const void *>(pszStr) << endl;
return 0;
}