84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
假设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的值咯