C語言基礎 C語言結構體 4 結構體陣列

2022-08-30 12:57:11 字數 2303 閱讀 7580

上一節, 我們講解了一下結構體的定義方式, 作用域, 以及注意事項, 這次我們來講解結構體陣列.

有些人疑問, 結構體也有陣列啊? 這是肯定的, 其實結構體陣列非常常用, 下面我們來看乙個需求示意圖:

按照上圖所示, 如果我們要求這樣子輸出, 我們就要有幾個不同型別的陣列才能完成, 但如果有了結構體, 我們就可以非常簡單的完成需求, 下面我們來看看例子:

#include int main()

;

struct rankrecord rank[3] =,,

};for (int i = 0; i < 3; i++)

return 0;

}

輸出結果:

這樣子我們就可以非常簡單的輸出我們想要的結果啦~~

補充知識點:

那麼結構體陣列所佔的位元組又是多少呢?我們來看看幾個不同的方式:

1.指標型別放在前面:

#include int main()

;

struct rankrecord rank[3];

printf("%ld\n", sizeof(rank));

return 0;

}

根據結構體是以成員最長的位元組儲存為特性所以輸出的位元組長度計算: 8 + 4 + 4 * 3 = 48

記憶體示意圖:

2.指標型別放在中間:

#include int main()

;

struct rankrecord rank[3];

printf("%ld\n", sizeof(rank));

return 0;

}

根據結構體是以成員最長的位元組儲存為特性所以輸出的位元組長度計算: 8 + 8 + 8 * 3 = 72

記憶體示意圖:

3. 指標型別放最後

#include int main()

;

struct rankrecord rank[3];

printf("%ld\n", sizeof(rank));

return 0;

}

根據結構體是以成員最長的位元組儲存為特性所以輸出的位元組長度計算: 4 + 4 + 8 * 3 = 48

記憶體示意圖:

結構體陣列的注意事項:

結構體陣列在賦值的時候也有一定的講究, 比如下面這個錯誤的例子:

#include int main()

;

struct rankrecord rank[3];

rank[0] = ;

printf("%d %s %d\n", rank[0].no, rank[0].name, rank[0].cord);

return 0;

}

輸出的結果:

其實這個注意事項是之前講過的, 一旦結構體初始化完之後, 再以上面這種方式賦值是不可行的, 因為那是位址, 而位址是常量, 給常量賦值怎麼可能實現呢?

正確的方式:

#include int main()

;

struct rankrecord rank[3];

rank[0].no = 1;

rank[0].name = "a";

rank[0].cord = 5000;

printf("%d %s %d\n", rank[0].no, rank[0].name, rank[0].cord);

return 0;

}

輸出的結果:

好了~~~這次我們就講到這裡, 下次我們繼續~~~

c語言基礎 結構體

結構體也是一種資料型別 這種資料型別裡面可以定義不同的資料型別的資料,是一種使用者自定義的資料型別 當然結構體裡面可以巢狀陣列和結構體 結構體的定義 struct 結構體名 注意 結構體的命名用駝峰法 每乙個成員變數後面要加上 在最後的 後面要加上 結構體變數的定義 struct 結構體名 結構體變...

c語言基礎 結構體

在c語言中,可以使用結構體 struct 來存放一組不同型別的資料。結構體的定義形式為 struct 結構體名 變數名表列 結構體是一種集合,它裡面包含了多個變數或陣列,它們的型別可以相同,也可以不同,每個這樣的變數或陣列都稱為結構體的成員 member 請看下面的乙個例子 struct stu 像...

C語言結構體

1.1.1 結構概念 1 結構存在的意義 存在是合理的,許多事物的存在是在不斷解決問題引入的,當然有更好的方法出現時改變也是合理的。在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型,學號可為整型或字元型,年齡應為整型,性別應為字元型,成績可為整型或實型。顯然不能用乙...