关于struct的用法,请各位高手看看

来源:百度知道 编辑:UC知道 时间:2024/05/18 13:27:00
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
#define uchar unsigned char
#define uint unsigned int
struct ko{
uchar de;
uchar so;
long fr;
};
main()
{
uchar aa[6]={'a','b',1,1,10,10}; //{"abcd"};
struct ko *tt; //={};
//&tt.de=aa;
//double kkk=122;
//float ppp=3.12;
//uchar nnn=12;
//uint iii=54;
tt=(struct ko *)aa;
//printf("iii=%d\n",sizeof(iii));
//printf("nnn=%d\n",sizeof(nnn));
//printf("ppp=%d\n",sizeof(ppp));
//printf("kkk=%d\n",sizeof(kkk));
//printf("tt->de=%d\n",sizeof(tt->de));
//printf("tt->fr=%d\n",sizeof(tt->fr));
printf("de=%c\nso=%c\nHello, world\nfr=%d\n",tt->de,tt->so,tt-&

可能因为编译器的优化
为了提高fr的访问速度编译器将它定位到内存的整双字位置,导致so后出内存间隔可用:&(tt->fr)- &(tt->so)察看

呵呵,你这个问题涉及到了结构体的内存结构问题,你这个结构体在内存空间中占用的空间并不简单是几个值空间大小的和。其中涉及到了内存对齐的问题,char占用一个字节,但是由于编译器的设置,在生成的空间中要和long变量对其。于是也就是为什么都申明为char就没有问题的缘故。

正解,尽量不要写这种和编译环境相关的代码