註冊登錄
伊莉討論區返回首頁

thelord2009的個人空間http://3214.eyny.com/?5788411[收藏][複製][分享][RSS]

日誌

結構struct詳解Part-II(如果結構變數是陣列的話)

已有 1972 次閱讀2023-1-14 11:45 AM

導讀
程式語言的攀親帶故,結構struct詳解。

依照
C最強入門邁向頂尖高手之路王者歸來
頁數13-15~13-16
int main()
{
int i,index,max;
在此最外圍最上面的地方宣告了底下都可以使用的int全域變數i,index,max。
struct family
{
char title[12];
int revenue;
}items[3]={{"coke",2000},{"泡麵",1800},{"文具",3200}};
items[3]代表裡頭依序有items[0]、items[1]、items[2],因此對應到items[3]={}裡頭的初始化設定值就變成,items[0]={"coke",2000},items[1]={"泡麵",1800},items[2]={"文具",3200},又items[0]、items[1]、items[2]都是結構變數的一員,結構變數設定值初始化就等於結構成員初始化。由上到下對應由左到右,所以例如items[0]={"coke",2000}的coke就對應到char title[12],2000就對應到int revenue。
index=0;
原書作者假設一開始index=0最暢銷
max=items->revenue;
原書作者假設一開始index=0最暢銷值是max,由於items是一個陣列屬於常數指標,指標存取成員是用->,參照變數及物件存取成員是用點.。items[3]只寫items代表起始點items[0],所以一開始假設最暢銷值max是items[0]。
for(i=1;i<3;i++)
由於items[3]陣列只有3個成員,所以i<3,i++代表跑完一次for迴圈i才+1。
{
if(max<(items+i)->revenue)
如果一開始設定的items[0]的max<(items+i)->revenue,之前有提過一維陣列的偏移量觀念,items是items[0],所以(items+i)就是(items[0]+i),如果i是1,(items[0]+1)就等於items[1]。
{
max=(items+i)->revenue;
index=i;
這裡配合上方if(max<(items+i)->revenue)的意思是,如果一開始設定的items[0]的max<(items+i)->revenue,則最大值max變成最新的(items+i)->revenue,最大值max的索引值index也變成i。
}
}
經過上方的for迴圈一直不斷地比對值的大小
所以最後得到的最大值max的索引值index也就是最大值的陣列的偏移量,也就是陣列的第幾個成員(可能是items[1]、items[2]?)的值最大
(items+index)->title 最大值第幾個成員(items+index)存取成員title
(items+index)->revenue 最大值第幾個成員(items+index)存取成員revenue


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelistdoodle 塗鴉板

您需要登錄後才可以評論 登錄 | 註冊
驗證問答 換一個

Archiver|手機版|廣告|聯絡我們|廣告查詢|廠商合作|伊莉

GMT+8, 2024-5-9 08:58 PM

回頂部