文天大人 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 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。