《朱老师物联网大讲堂》学习笔记
网站:www.zhulaoshi.org
#include<stdio.h>
#include <string.h>
struct test
{
int a;
int b;
char c;
};
int main( int argc, char *argv[] )
{
struct test t1;
t1.a = 5;
t1.b = 55;
t1.c = '5';
int *p1 = (int *)&t1;
int *p2 = (int *)((int)&t1+4);
char *p3 = (char *)((int)&t1 + 8 );
printf("%d\n",*p1);
printf("%d\n",*p2);
printf("%c\n",*p3);
}
比较疑惑的是
int *p2 = (int *)((int)&t1+4);
char *p3 = (char *)((int)&t1 + 8 );
之前是这样
int *p2 = (int *)(&t1+4);
char *p3 = (char *)(&t1 + 8 );
读出的数据不对,改成
int *p2 = (int *)((char)&t1+4);
char *p3 = (char *)((char)&t1 + 8 );
为什么不对??
&t1是个地址,但是对这个地址进行+1,就代表增加了t1级别,也就是struct test的地址偏移,而我们这里是希望增加int大小的偏移,故先把他转换为int型,再加4.
转换成char型,已经超过了char类型的表示范围,如果不是这个原因,兴许能够使用呢。