文天大人 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 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同