#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的
0×01 0×01 0×01
我想知道爲什麼& p-> data和p->數據似乎被解析到相同的地址。
在我看來,& p->數據應該是指向數據[0]地址的指針,而p->數據只是數據[0]的地址。如果情況確實如此,我會得到奇怪的值打印出來,對嗎?
理想情況下,我不認爲我會用這樣的代碼,但是我在別人的代碼,通過它跑了,這是一個測試,我寫的,看看發生了什麼事情。
如果這個問題已經回答了,我找不到它,道歉,如果是這樣的話。
看看http://stackoverflow.com/questions/7707190/address-of-array-difference-between-having-an-ampersand-and-no-ampersand –
甚至在這裏更好:http:// stackoverflow。 COM /問題/ 2893911 /地址的-AN-陣列地址的感-忽略待GCC –
也參見[這裏](http://c-faq.com/aryptr/aryvsadr.html)和[這裏](http://c-faq.com/aryptr/ptrtoarray.html)。 –