簡體   English   中英

建立索引以獲取結構的訪問成員。 C編程

[英]Indexing to get access members of a structure. C programming

假設我有一個結構

typedef struct  
{ 
   unsigned char mem1; 
   unsigned char *mem2
} MEMBERS;

哪里

 unsigned sample = 12
 MEMBERS memvalues = {  0x15 , &sample  };

當函數“GET_MEM”將結構“MEMBERS”的地址返回到X_mem時,我需要訪問值mem1和mem2。 我的意思是:

unsigned char *X_mem = GET_MEM ( );    //function returns address of memvalues
unsigned value1 = *X-mem;
unsigned Value2 = *++X_mem;

我希望value1給出0x15,而value2給出12。

我怎樣才能做到這一點?

注意:請不要假設上面的代碼示例在語法上是正確的。 它只是為了表達我的意圖。 謝謝伙計們。

您需要轉換GET_MEM()返回的錯誤鍵入的指針:

const MEMBERS *some_members = (MEMBERS *) GET_MEM();
unsigned value1 = some_members->mem1;
unsigned value2 = *some_members->mem2;

是的,讓GET_MEM()返回結構的地址。

MEMBERS *X_mem = GET_MEM( );    //function returns address of memvalues
unsigned char value1 = X_men->mem1;
unsigned char Value2 = *(X_mem->mem2);

除非將X_mem聲明為指向MEMBERS結構的指針,否則不能讓它像這樣工作。 依賴於結構開頭的地址偏移是危險且不可移植的,因為編譯器可以在mem1之后的任何地方隨意添加任意數量的填充字節。 因此,理智的解決方案是編寫MEMBERS *X_mem ,然后通過 - >運算符訪問每個成員。

如果由於某種原因需要編寫依賴於此類偏移的代碼,則需要確保“填充字節模式”符合預期,或者完全禁用填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM