qq_41517828
qq_41517828
采纳率25.9%
2018-08-08 03:19 阅读 548

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

5

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    xjw_87 xjw_87 2018-08-08 03:29

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

    点赞 2 评论 复制链接分享
  • xxxlman +竹喧 2018-08-08 03:32

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

    点赞 评论 复制链接分享
  • safsafdas123 clovy 2018-08-08 14:45

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

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

    点赞 评论 复制链接分享
  • qq_42025133 少年不知勤学早 2018-08-08 15:04

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

    点赞 评论 复制链接分享

相关推荐