知識社群登入
位置: 艾鍗學院 Blog > 專業論壇 > 討論
pointer 跟 struct 以及 指標轉型 的問題
1樓
大家好:

目前我有一個疑問,
我定了ㄧ個結構(Struct):

#define unsigned long uint32;
#define unsigned char uint8;

typedef struct _Frame{
uint32 ID;
uint8 Number;
uint8 Message[8];
}Frame;

然後我也建立了ㄧ個結構的陣列:
Frame DATAFRAME[8];

透過一個結構指標將直傳到Function
Frame *Mesg;
Mesg=*(DATAFRAME+2);
func(ptr,MESG);

想要透過Function直接改變這個結構陣列的內容,
可是我不確定這樣的寫法能不能正確的修改結構的陣列的內容。
ptr1 = (uint32 *)    &(MESG->ID);
ptr2 = (uint8 *)      &(MESG->Number);
ptr3 = (uint8 *)      (MESG->Message);

這轉型後這些指標(*ptr1, *ptr2, *ptr3)指向的位址
與結構(MESG->ID, MESG->Number, MESG->Message[0])的位址ㄧ樣的嗎?

請大大指點迷津。

函數內容為:
void func(uint8 *ptr,Frame *MESG)
{
uint32 *ptr1;
uint8 *ptr2;
uint8 *ptr3;

ptr1 = (uint32 *) &(MESG->ID);
ptr2 = (uint8 *) &(MESG->Number);
ptr3 = (uint8 *) (MESG->Message);
*ptr1 = *ptr;
ptr++;
*ptr1 |= (*ptr<<8);
ptr++;

*ptr2 = *ptr;

for (i=0;i<8;i++)
{
ptr++; 
*(ptr3+i) = *ptr;
}
}



2樓
更正一下,

透過一個結構指標將直傳到Function
Frame *Mesg;
Mesg=(DATAFRAME+2);  //結構的陣列[2]位址給Mesg
func(ptr,Mesg);
3樓
總而言之 我的問題如下:

有問題的部份是:

ptr1 = (uint32 *) &(MESG->ID); //MESG->ID 的位址轉換給ptr1 
ptr2 = (uint8 *) &(MESG->Number); //MESG->Number 的位址轉換給ptr2 
ptr3 = (uint8 *) (MESG->Message); //MESG->Message[0] 的位址轉換給ptr3 

上述的位址讀取是不是正確的?
例如 :

*ptr1 內容 是不是跟MESG->ID 在一樣的記憶體位址,
*ptr2 內容 是不是跟MESG->Number 在一樣的記憶體位址,
*(ptr3+1)的內容是不是跟MESG->Message[1]是ㄧ樣的。


4樓
*ptr1 內容 是不是跟MESG->ID 在一樣的記憶體位址,
*ptr2 內容 是不是跟MESG->Number 在一樣的記憶體位址,
*(ptr3+1)的內容是不是跟MESG->Mesrsage[1]是ㄧ樣的。

以上都是對的!所以你要問的是??
5樓
那我的問題已經解決了