您的位置:首页 > 其它

unsigned long指针字节大小(和对齐)

2013-02-24 11:42 162 查看
-----file tt.c------机器和OS都是64位的

#include <stdio.h>

int main()

{

unsigned long *a;

unsigned long *b;

unsigned long c;

a = &c;

b = (unsigned long *)((unsigned long)a + 100);

printf("b - a is %d \n", b - a);

printf("addr of b is %lx \n", b);

printf("addr of a is %lx \n", a);

return 0;

}

运行结果:

$ make tt

cc tt.c -o tt

$ ./tt

b - a is 12

addr of b is 7ffffeaab31c

addr of a is 7ffffeaab2b8

----------------------------------------

---file t.c--- 机器和OS都是64位的

#include <stdio.h>

typedef struct student {

char c;

long a;

int b;

}stu;

int main(int argc, char** argv)

{

int *a;

int b = 0;

a = &b;

printf("sizeof(stu) is %d \n", sizeof(stu));

printf("The addr of a is %lx\n", a);

printf("The addr of (stu* )a - 1 is %lx \n", (stu* )a - 1);

printf("The addr of (stu* )(a - 1) is %lx \n", (stu* )(a - 1));

return 0;

}

运行结果:

$ make t

cc t.c -o t

$ ./t

sizeof(stu) is 24

The addr of a is 7fffc9270194

The addr of (stu* )a - 1 is 7fffc927017c

The addr of (stu* )(a - 1) is 7fffc9270190

分析:

在结构体中是按最长的类型对齐的,即在struct student中是按long型对齐的,即结构体为24字节。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: