文天大人 2020-03-29 01:36 采纳率: 60%
浏览 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 Cesm如何关闭不用的模块呢
  • ¥15 vue2两层数据导出为excle
  • ¥15 有人能帮我做一下这个项目吗
  • ¥15 网络上传速率比下载速率高
  • ¥15 (标签-游戏|关键词-网页游戏)
  • ¥15 这个咋搞🥹可能需要手把手教
  • ¥15 接口和关键字的问题,多选
  • ¥15 yolov5s模型下载就卡住,没有运行结果
  • ¥20 androidstudio工具问题
  • ¥15 想问一些关于计量的问题