u011624903
真的想睡马银霜
采纳率33.3%
2020-03-29 01:36

本人初学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条回答

  • qq_36822217 BugM 1年前

    首先你的代码中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*指针指向的地址的字符串,而对于其他类型的指针,则输出地址值。

    点赞 评论 复制链接分享
  • weixin_43839785 水枂 1年前

    首先你这个是c++不是c
    其次你定义结构体没有进行初始化操作打印出来的当然就不确定,可能乱码也可能是其他的
    char类型的指针并没有特别的地方,他是指针类型

    点赞 评论 复制链接分享