文天大人 2020-03-29 01:36 采纳率: 75%
浏览 170
已采纳

本人初学C,想请教关于结构体或者char类型指针的问题

如题,该问题我不知道是属于结构体方面的问题还是char类型的问题,本人刚接触c语言,代码如下

struct MyStruct1
{
    char  b[1];
    double c;
    int a;
};
struct MyStruct2
{
    char  b;
    double c;
    int a;
};

int main()
{
    MyStruct mys1;
  MyStruct mys2;
    std::cout << &mys1.b << "\n";
    std::cout << &mys2.b<<  "\n";
}

请问为什么输出mys1.b的指针时候是乱码呢???
我有下面几个疑问:
char类型指针与其他类型相比有什么特殊的地方吗??
为什么其他类型不乱码呢?
char数组也不乱码
还是char类型指针遇到字节对齐这个性质,会产生特殊的情况?

还请CSDN里的大神帮忙解惑,再次感谢

  • 写回答

2条回答 默认 最新

  • BugM 2020-03-29 13:42
    关注

    首先你的代码中mys1和my2的类型名字写错了,我们假设mys1是MySturct1类型的,mys2是MyStruct2类型的
    int main()
    {
    MyStruct1 mys1;
    MyStruct2 mys2;
    std::cout << &mys1.b << "\n"; // 此行会输出一个地址,因为&mys1.b是一个数组指针
    std::cout << &mys2.b<< "\n";// 由于&mys2.b的类型为char*,所以此行会显示mys2.b的内容,由于没有初始化b的值,显示为随机值
    }

    发生这种情形的原因是标准库中cout对"<<"操作符的重载。
    cout<<对于接受的不同类型的参数会有不同的处理,接收整型则打印整型,接收浮点型打印浮点型,但是当接收char*类型的时候,cout<<操作符重载会打印char*指针指向的地址的字符串,而对于其他类型的指针,则输出地址值。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题