C++编程问题请大神赐教谢谢...

char animal[20] = "bear";
double bubble = 3.2;
char *ps;
double *p;

为什么可以直接ps=animal,并且cout<<ps就是ps指针指向的字符串而不是输出地址。
而double 类型却需要p = &bubble,并且 cout<<p 是地址,而不是double类数值?

4个回答

数组名的值是个指针常量,也就是数组第一个元素的地址,所以animal的类型是char *,可以直接ps=animal。而double 类型是个变量,要赋值给double *的指针变量需要取double 类型变量的地址,所以double 类型需要p = &bubble。cout标准输出对char *是按字符串来解析,所以cout<<ps输出的是字符串,cout标准输出对其他指针类型默认是按地址输出,所以cout<<p输出的是地址

因为c++标准库的标准输出cout实现方式,如果遇到char*参数就输出字符串。
如果遇到double*,那么编译器就调用cout运算符的usigned int类型重载函数,等于把double*类型作为数值传入

xxxlman
明月竹喧 牵涉到两个问题,一是cout的<<运算符对于不同数据类型的实现,而是编译器在编译时使用<<运算符的哪个重载函数
一年多之前 回复

char * 类型,字符串,也就是字符的指针。
double *类型,double类型的指针。

输出字符串需要字符串的地址(同样输出字符,需要传入字符的值比如你的*ps,就会输出第一个字符b)。
输出double类型的值就要传入*p,因为你的p类型是double指针

数组名的值是个指针常量,也就是数组第一个元素的地址,所以可以直接ps=animal。而double 类型是个变量,要赋值给double *的指针变量需要取double 类型变量的地址,所以double 类型需要p = &bubble。cout标准输出对char *是按字符串来解析,所以cout<<ps输出的是字符串,cout标准输出对其他指针类型默认是按地址输出,所以cout<<p输出的是地址
建议参考学习c++ primer plus。里边讲解十分详细。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问