C語言複雜結構體裡面變數的呼叫

2021-10-20 19:10:11 字數 1521 閱讀 8154

這裡擷取ipmitool windows 1.8.18的部分**做說明。

struct ipmi_rs  msg;

struct session;

union ipmi_response;

struct open_session_response;

struct rakp2_message;

struct rakp4_message;

struct sol_packet;

} payload;

};

這段**不算太複雜,結構體成員裡面沒有涉及到指標變數,只是有關於結構體的巢狀,結構體含成員union等,本文主要講解如何層級訪問和呼叫結構體裡面的變數。先建立上面結構體例項。

struct ipmi_rs * rsp;             #建立ipmi_rs結構體指標

rsp = ipmi_lan_recv_packet(intf); #ipmi_lan_recv_packet()函式返回的是結構體首位址,並將該結構體的首位址賦給rsp指標

這裡ipmi_lan_recv_packet()函式不做說明,它是ipmitool裡面定義的函式,該函式返回的是ipmi_rs型別的結構體的位址,而指標就是指向位址的,所以可以將返回值賦給指標變數rsp。

可以通俗的打個比喻,這個結構體就像零食大禮包,大禮包名字叫旺旺,等同於結構體的ipmi_rs,裡面有不同型別的零食,類似於結構體裡定義的不同型別的資料(int/char/bool等),然後被你買了回來,這時你告訴商家你的位址,就有一包這樣的零食大禮包根據這個位址被寄到了你的手上,這個位址就是rsp,rsp指向的人就是你,當然可能還有其他吃貨也買了這款零食大禮包,位址可以是rsp1、rsp2等等,乙個位址相當於乙個結構體例項。然後你拿到大禮包,開啟一看,發現有的可以直接吃,有的還有巢狀的小包裝,就像結構體裡的巢狀。接下來就是你如何吃(呼叫)裡面的東西了。

接下來我們要呼叫這個結構體裡面不同層級的變數,這些變數在結構體裡面的地位可分為三種情況:

1、可以直接吃的小零食,ccode、data[ipmi_buf_size]、 data_len這三個變數在結構體裡地位一致,屬於最外層的成員,可以如下訪問並呼叫:

rsp->ccode

rsp->data[ipmi_buf_size]

rsp->data_len

2、拆開大禮包還有小包裝的,msg、session、payload小包裝裡面的變數地位是一樣的,可以這樣訪問(各取裡面乙個變數為例):

rsp->msg.netfn

rsp->session.authtype

3、這時發現payload小包裝裡面還有5個小袋子(ipmi_response、open_session_response、rakp2_message、rakp4_message、sol_packet),那就要再往下拆:

rsp->payload.ipmi_response.rq_addr
終於所有的零食都可以吃到了。

c語言 結構體 指標變數

typedef struct treet treet,ptreet int main int argc,char argv ptreet bt insert elemtype target,ptreet pptree static ptreet bt makenode elemtype target...

C語言結構體變數和結構體變數的指標作函式引數例題

將n個學生的資料表示為結構體變數,內含學生學號 姓名和三門課的成績。要求輸出平均成績最高的學生的資訊 包括學號 姓名 3門課成績和平均成績 解題思路 將n個學生的資料表示為結構體陣列 有n個元素 按照功能函式化的思想,分別用3個函式來實現不同的功能 1 用input函式來輸入資料和求各學生的平均成績...

C 結構體變數的引用 結構體變數引用

c 對結構體變數可以在定義時指定初始值。struct studentstudeng1 c 在定義了結構體變數以後,可以引用這個變數。可以將乙個結構體變數的值賦給另乙個具有相 同結構的結構體變數。student1 student2 可以引用乙個結構體變數中的乙個成員的值。student1.num 表示...