先給出通過字元型指標輸出字串的範例程式碼,如下:
#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;}