問題描述:
今天無意中遇到乙個問題,有如下程式,我想列印兩個物件中的字元指標的位址來驗證系統提供的賦值運算子過載是否是淺拷貝,結果直接cout字元指標輸出的並不是指標的位址而是整個字串,為什麼呢?
#define _crt_secure_no_warnings
#include #include using namespace std;
class classa
classa(const char* pszinputstr)
virtual ~classa()
public:
char* pszteststr;
};int main()
輸出結果如下圖:
問題解答:
查閱了相關資料得知:c++標準庫中i/o類對《操作符過載,因此在遇到字元型指標時會將其當作字串名來處理,輸出指標所指的字串。因此,我們用static_cast強制型別轉換把字串指標轉換成無型別指標即可輸出指標位址,如下:
char*p = "abcdefg";
cout << static_cast(p) << endl << *p << endl << *(p + 1) << endl << p << endl << &p << endl;
cout << endl;
輸出結果如下圖:回到原來的問題上來(驗證淺拷貝):
#define _crt_secure_no_warnings
#include #include using namespace std;
class classa
classa(const char* pszinputstr)
virtual ~classa()
public:
char* pszteststr;
};int main()
輸出結果如下圖:
兩個物件中的指標指向同一塊記憶體,說明系統提供的預設賦值運算子過載是淺拷貝!
僅以此作為記錄!
c c 中如何列印字串的位址
在c 中,如果cout乙個字元陣列的話,那麼它會沿著這個位址,一直輸出這個字串,直到遇到 0 例如 char c cadn 0hello cout 輸出的結果是 cadn cout c 0 不幸的是,這樣輸出的結果依舊不是我們需要的位址。但是,如果我們回歸到c語言的話,例如用printf的話,如下 ...
qt中呼叫印表機列印字元
qt中呼叫印表機列印字元 環境 主機 win8 開發環境 qt5.4.0 說明 呼叫熱敏印表機,列印測試字元 原始碼 pro檔案載入庫檔案 mainwindows.h ifndef mainwindow h define mainwindow h include include include in...
c語言printf列印字串顏色
基本列印 格式 printf 033 字背景顏色 字型顏色m字串 033 0m printf 033 41 32m字型背景是紅色,字是綠色 033 0m n 41是字背景顏色,32是字型的顏色,字型背景是紅色,字是綠色是 要輸出的 字串.後面的 033 033 0m是 配對的為 控制碼。先來說一下顏...