#include "stdio.h" //包含标准的输入输出库stdio.lib
struct st_t //声明一个结构体,名叫st_t
{
int status; //该结构体中包含一个int类型的变量:status
short *pdata; //该结构体还包括一个short类型的指针:pdata
char errstr[32]; //该结构体重还有个char类型的数组:errstr[32],数组大小为32个字节
};
void main() //主函数
{
struct st_t st[16]; //先定义个结构体(就是上面声明的那个)数组,名字叫做st[16],其中包
//含16个元素(也就是说有16个这样的结构体)
char *p=(char *)(st[2].errstr+32); //定义一个char类型的指针,并让该指针指向刚刚定义的那
//个结构体数组中,其中st[2].errstr+32,意思为指向该结构
//体第三个元素的errstr且再向后偏移32未,实际上就是指向
//了第四个元素的开头即:st[2],而(char *)意思则是将其
//强制转换为char类型的指针
printf("%d\n",(p-(char *)(st))); //最后是打印,将刚刚得到的指针向前偏移一个struct st_t结
//构体的长度,来进行打印,最后会打印出st[2].errstr的值
}
ps:由于你对struct st_t st[16];没有赋初值,所以在win32下应该打印结果为0
打字好累,望采纳
追问值是108,但好像还是不对,这是百度公司的一道笔试题,选项里面没有108这个数,我认为输出的是两个地址之间的差值,你再看一下,谢谢