導讀:
程式語言的攀親帶故,結構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