将数组转换为结构指针
发布时间:2020-12-16 07:08:18 所属栏目:百科 来源:网络整理
导读:#include stdint.h #include stdio.h #include stdlib.h #define MAX_PARMS 20 #define DATA_MAX 50 struct s { uint8_t cmd; uint8_t main; uint8_t sub; uint8_t index; uint8_t reg; uint8_t sendlen; uint8_t reclen; uint8_t parm[MAX_PARMS]; }; struc
#include <stdint.h> #include <stdio.h> #include <stdlib.h> #define MAX_PARMS 20 #define DATA_MAX 50 struct s { uint8_t cmd; uint8_t main; uint8_t sub; uint8_t index; uint8_t reg; uint8_t sendlen; uint8_t reclen; uint8_t parm[MAX_PARMS]; }; struct t { uint8_t hdr; uint8_t data[DATA_MAX]; uint8_t len; }; int main() { struct t *p = malloc(sizeof(struct t)); p->data[0] = 0xBC; p->data[1] = 0xDE; p->data[2] = 0xFF; p->data[3] = 0x01; struct s *testCmd1 = (struct s *) &p->data; struct s *testCmd2 = (struct s *) p->data; printf("0x%02x 0x%02x 0x%02xn",p->data[0],testCmd1->cmd,testCmd2->cmd); printf("0x%02x 0x%02x 0x%02xn",p->data[1],testCmd1->main,testCmd2->main); printf("0x%02x 0x%02x 0x%02xn",p->data[2],testCmd1->sub,testCmd2->sub); printf("0x%02x 0x%02x 0x%02xn",p->data[3],testCmd1->index,testCmd2->index); return 0; } 运行上面的代码打印出来:
我想知道为什么& p->数据和p->数据似乎被解析到同一地址. 在我看来,& p->数据应该是指向数据[0]地址的指针,而p->数据将只是数据[0]的地址.如果是这样的话,我会为其中一个打印出奇怪的值,对吗? 理想情况下,我不认为我会使用这样的代码,但我在其他人的代码中遇到了它,这是我写的一个测试,看看发生了什么. 如果这个问题已经得到解答,我就找不到了,如果是这样的话就道歉了. 解决方法
在经过étienne评论的帖子后回答我自己的问题:
“数组的地址与第一个元素的地址相同” -John Bode(Address of array – difference between having an ampersand and no ampersand) 即对于名为“data”的数组:& data == data 因此,在我的情况下,& p->数据与p->数据的地址相同. 感谢您的快速回复,étienne! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |