#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%02x\n", p->data[0], testCmd1->cmd, testCmd2->cmd);
printf("0x%02x 0x%02x 0x%02x\n", p->data[1], testCmd1->main, testCmd2->main);
printf("0x%02x 0x%02x 0x%02x\n", p->data[2], testCmd1->sub, testCmd2->sub);
printf("0x%02x 0x%02x 0x%02x\n", p->data[3], testCmd1->index, testCmd2->index);
return 0;
}
运行上面的代码将会打印出以下内容:
0xbc 0xbc 0xbc
0xde 0xde 0xde 0xff 0xff 0xff
0x01 0x01 0x01
我想知道为什么 &p->data 和 p->data 似乎解析成相同的地址。
对我来说,&p->data 应该是指向 data[0] 的地址, 而 p->data 只是 data[0] 的地址。如果那样的话,其中一个变量将会打印出错误的值,对吗?
理想情况下,我不认为我会使用这样的代码,但我在别人的代码中遇到了它,这是我写的一个测试,以了解具体情况。
如果已经回答了这个问题,但我没有找到它,请谅解。