2 qq 30137777 qq_30137777 于 2016.04.27 09:47 提问

关于c++结构体长度的问题
#include <iostream>

using namespace std;

struct Student{
    char ch;
    int i;
}st1;

struct name{

}n;

struct j{
    static int i ;
}l;

struct nam{
    static int i;
}e;

struct Studen{

}st;


int main(){
    int s = sizeof(st1);
    int n2 = sizeof(n);
    int l = sizeof(l);
    int e1 = sizeof(e);
    int se = sizeof(st);
    printf("%d %d  %d %d %d", s, l, n2, e1, se);
    return 0;
}

在这个程序中,第二个输出的数字为什么是4呢?不应该是1么?

6个回答

caozhy
caozhy   Ds   Rxr 2016.04.27 09:50

结构体按照4字节的倍数对齐。

qq_30137777
qq_30137777 static不是不用算在结构体内么?那为什么e1输出时1?
一年多之前 回复
caozhy
caozhy   Ds   Rxr 2016.04.27 09:50
CSDNXIAOD
CSDNXIAOD   2016.04.27 09:52

一个结构体长度的问题
c++中关于结构体长度的计算问题
c++结构体对齐问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

wangxin_el
wangxin_el   2016.04.27 10:05

第二个 输出的 不是 sizeof(l)吗, l位 int类型。 int类型是4字节的

wangxin_el
wangxin_el 回复4393Z: int l = sizeof(l) 局部变量l 已经覆盖了全局变量l 所以l在mian函数内 指的是 int型 而不是结构体j
一年多之前 回复
qq_30137777
qq_30137777 e呢?e为什么输出1?
一年多之前 回复
qq423399099
qq423399099   Ds   Rxr 2016.04.27 10:07

就是1
printf("%d %d %d %d %d", s, l, n2, e1, se);里的l和n2楼主你的顺序写错了吧

qq_30137777
qq_30137777 哦哦
一年多之前 回复
qq423399099
qq423399099 回复4393Z: 你第二个输出的是sizeof(l)的长度不是sizeof(n)的长度
一年多之前 回复
qq_30137777
qq_30137777 你用的什么编译器?我实在命令行下输出的,用的mingw,输出时4
一年多之前 回复
NK_test
NK_test   Rxr 2016.04.28 00:18

对结构体进行sizeof不是单纯的内部变量的的字节和。涉及到内存对齐的问题,具体可以百度。结构体中最长字节不超过4时,默认4字节对齐

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!