假设Student类里有char* a ="Tom";char* b ="Rose";
如果有Student* p;
那么cout << p->a; // 输出Tomcout << *(p->a); //输出T
这是为什么呢? a不是一个指针吗,如果是cout << p->a; 不是应该会输出a的地址吗
为什么cout << *(p->a); 只是输出T呢?
闭关修行中......
一個表示字串的變數本質上就是指針,一個表達式兩個意思,編譯器肯定得有一個確定的邏輯來處理這種情況,不然就亂套了
實際上C++標準函式庫中I/O類別對<<操作符進行重載時的實作邏輯是:在遇到char类型指针時會將其固定當作字串來處理,輸出指標所指的字符串。
<<操作符
char类型指针
要想輸出位址,強制轉換為无类型的指针即可
无类型的指针
cout << static_cast<const void *>(p->a);
*(p->a)為啥是T
對一char类型指针取值*操作,當然取得一個char的值咯
*
一個表示字串的變數本質上就是指針,一個表達式兩個意思,編譯器肯定得有一個確定的邏輯來處理這種情況,不然就亂套了
實際上C++標準函式庫中I/O類別對
<<操作符
進行重載時的實作邏輯是:在遇到char类型指针
時會將其固定當作字串來處理,輸出指標所指的字符串。要想輸出位址,強制轉換為
无类型的指针
即可*(p->a)為啥是T
對一
char类型指针
取值*
操作,當然取得一個char的值咯