http://hi.baidu.com/bmrs/blog/item/83561e00605c13db267fb555.html
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[128];
struct Test{
int len;
char content[0];
};
int main()
{
char c0 = 'a', c1 = 'b', c2='c', c3='d';
printf("c0=%c, c1=%c, c2=%c, c3=%c/n&c0=%p, &c1=%p, &c2=%p, &c3=%p/n", c0, c1, c2, c3, &c0, &c1, &c2, &c3);
struct Test t;
t.len = 0x01020304;
//整个结构的大小为4,char content[0]不占用空间
。
printf("sizeof(struct Test)=%u, sizeof(struct Test.content[0])=%u/n", sizeof(t),sizeof(t.content));
// t.content 和 &t.content是一样的
printf("&t=%p, &t.len=%p, t.content=%p, &t.content=%p/n", &t, &t.len, t.content, &t.content);
strcpy(t.content, "123");
//原先的c0,c1,c2,c3被覆盖了,这是因为大家都在stack上
,很容易造成stack损坏啊
printf("c0=%c, c1=%c, c2=%c, c3=%c/n&c0=%p, &c1=%p, &c2=%p, &c3=%p/n", c0, c1, c2, c3, &c0, &c1, &c2, &c3);
char buf[1024] = {0};
struct Test *p = (struct Test *)buf;
p->len = 0x01020304;
strcpy( p->content, "abcd");
printf("/np=&buf=%p, p->content=%p, p->content=%s/n", buf, p->content, p->content);
int k;
for(k=0; k<10; ++k) //这次修改的就是buf中的内容了
printf("address %p: buf[%d]=%d/n", buf+k, k, buf[k]);
getchar();
return 0;
}
本文通过C语言示例代码详细解析了结构体的使用方法,包括结构体成员的初始化、内存布局以及如何通过指针操作结构体变量等内容。此外还探讨了在不同上下文中结构体的大小变化以及局部变量与结构体之间的内存分配问题。
944

被折叠的 条评论
为什么被折叠?



