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