关于结构体内存连续问题?
定义一个结构体 struct student{int num1,int num2,int num3}stu;struct stu Stu;for(i=0;i<3;i++){printf(“num:%d\n”,*(&Stu.name1 + sizeof(int)* i);)}这么用可以吗?会依次打印num1,num2,num3吗? struct里的元素类型是相同类型,因为需要不同命名不能用数组。int的话,MDK为例会都是4字节对齐。 首先,结构体写错了,第二你直接用*是个错误,编译器不知道你接下来是按int读取还是其他大小读取,第三直接取值和一个数值相加很多能被隐形类型转换,不安全甚至是错误。改为*(int *)((uint32_t)&Stu.num1 + sizeof(int) * i)。另外直接将Stu强转成int *更方便 结构体内部都是同一种数据类型是可以这样操作,但这样阅读不好
我一般是用联合体,联合体内有结构体和数组
union student
{
struct
{
int number1;
int number2;
int number3;
};
uint8_t bytes;
uint32_t words;
}stu; 本帖最后由 emwin 于 2022-6-9 14:55 编辑
要点在这行,其他错误编译器会提示你:
printf("num:%d\n",*(&Stu.num1 + i)); emwin 发表于 2022-6-9 14:54
要点在这行,其他错误编译器会提示你:
printf("num:%d\n",*(&Stu.num1 + i));
还是你理解我想说的重点,我想问一下这么用会有什么隐患吗? 不指定指针类型应该会报错, 或最起码会警告, 巨体这要看那家的编译
老师好! 想请教一下, 我做Modbus从机, 对主机写入的值做 限制(Min ~ Max)目前我是初始化结构体时, 直接写好最大值 和 最小值 再比对写入值, 有没有啥好的思路
页:
[1]