[英]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.