1. 程式人生 > >C語言:Struct之結構陣列以及結構的巢狀

C語言:Struct之結構陣列以及結構的巢狀

一、結構陣列

為什麼要使用結構陣列?

舉個例子來說,假如我們定義了一個結構體book,顯然每一本書都可以用一個book型別的結構體來描述。要描述兩本書就需要用兩個這樣的結構變數,以此類推,如果我們要處理10本,100本,1000本...我們難道要一個一個定義嗎?我們想到陣列這種資料結構,它可以一次性分配一塊記憶體用於存放多個數據,所以我們可以使用一個該結構的陣列來存放這1000本(或者更多)的書。我們把這種形式的陣列稱為結構陣列。

結構陣列的宣告

首先假如我們定義的book結構體如下:

struct book {
	char title[40];
	char author[40];
	float value;
};

宣告一個結構陣列與宣告一個其他型別的陣列的方法是一樣的:

struct book library[MAXBKS];//MAXBKS是一個int型的整數

這條語句宣告library為一個具有MAXBKS個元素的陣列,陣列的每個元素都是bbook型別的結構。因此,library[0]是一個book結構,library[1]是一個book結構,以此類推。

結構陣列的使用方法

用成員運算子("."),來表示結構陣列中的成員:

library              //book結構陣列
library[2]           //陣列中的元素,就是我們定義的第三個book結構 
library[2].title     //char型別的陣列,library[2]中的title成員
library[2].title[4]  //library[2]中的title成員陣列中的一個字元

二、巢狀結構

一個結構中含有另一個結構,稱為巢狀結構。

巢狀結構在很多時候是非常有用的,比如要建立一個關於朋友的檔案資訊的結構,這些資訊中肯定要包含名字(name)這個資訊,而一個人的名字又包含了姓和名,這時我們就可以把名字(name)本身表示成一個結構,在建立朋友檔案結構的時候直接將其包含進去。

首先建立一個name結構:

struct name{          //name結構宣告
	char firstname[20];
	char lastname[20];
};

有了name結構,可以在此基礎上建立guy結構了:

struct guy{
	struct name handle;//結構巢狀
	char favfood[20];
	char job[20];
	float income;
};

巢狀結構如何初始化?

初始化方法與普通的結構體初始化方法相同:

struct guy fellow = { //初始化變數
	{"xu","song"},
	"hambergers",
	"student",
	23.00
};

巢狀結構中的成員操作:

fellow.handle.firstname //執行結果:xu
fellow.handel.lastname //執行結果:song
fellow.favfood //執行結果:hambergers
fellow.job //執行結果:student
fellow.income //執行結果:23.00

相關推薦

C語言Struct結構陣列以及結構

一、結構陣列為什麼要使用結構陣列?舉個例子來說,假如我們定義了一個結構體book,顯然每一本書都可以用一個book型別的結構體來描述。要描述兩本書就需要用兩個這樣的結構變數,以此類推,如果我們要處理10本,100本,1000本...我們難道要一個一個定義嗎?我們想到陣列這種資

C語言理解函式指標陣列和定義

函式指標陣列和定義 陣列是一個存放相同型別資料的儲存空間,那我們已經學習了指標陣列,比如:     int *arr[10];//陣列的每個元素是int* 那要把函式的地址存到一個數組中,那這個陣列就叫函式指標陣列,那函式指標的陣列如何定義呢?   int (

C語言 有一個字元陣列的內容為:"student a am i", 請你將陣列的內容改為"i am a student".

題目:有一個字元陣列的內容為:"student a am i", 請你將陣列的內容改為"i am a student".     要求:不能使用庫函式。只能開闢有限個空間(空間個數和字串的長度無關)。 分析:分為兩大部分:①把整個字元陣列逆置                

c語言4個比較大小,函式的

#include <stdio.h> int main()// { int max_4(int a,int b,int c,int d);//對max _4的宣告 int a,b,c,d,max; printf("Please enter 4 interger numbe

C語言及程式設計》實踐參考——迴圈的流程圖

迴圈的巢狀流程圖(1)求s=1!+2!+……10!,即求1到10的階乘和[參考解答]或者: (2)求s=1+2^2+3^3+4^4+5^5+6^6,要求n^n不能用求冪的運算直接計算(n^n表示n的n次

C語言利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值

題目來源:大工慕課 連結 作者:Caleb Sung 題目要求 利用指標編寫程式,定義一個3行3列的二維陣列,並在程式中對其進行賦值,陣列元素的型別不限,輸出該二維陣列以及各行的均值,各行

C語言constkeyword、結構

data con post -s 標簽 初始化 weight 什麽 聯系 前幾節內容的解說,主要是內存地址及指針的分析。這一節解說一下easy混淆的keywordconstant及結構體的知識。 一、constkeyword 1. 字符常量的指針 char const

C語言利用結構體的學生成績

結構體-學生成績管理 題目:有50個學生,每個學生的資料包括學號、姓名、3門課的成績,從鍵盤輸入50個學生資料,要求打印出每門課的平均成績,以及三門課總分最高的學生的資料(包括學號、姓名、3門課的成績,三門課的總分)。 #include<stdio.h> #define

c語言typedef + struct + 指標

c語言規範,定義結構體: typedef  struct ANSWER_HEADER { u8 u8Type; u8 u8Code; u32 u32TimeStamp; struct ANSW

c語言——線性表順序結構

#include <stdio.h> #include <stdlib.h> #include <conio.h> //線性表——順序儲存 #define LIST_INIT_SIZE 10 #define LISTINCREMENT 10 #define ERR

C語言簡單入門結構體和連結串列

C語言的連結串列也是一個很重要很難啃的骨頭,我是這麼覺得的! 以下只是個人對連結串列的總結和記錄方便日後複習所用,如有錯誤,請留言狠批,謝謝! 先說下連結串列的簡單實現:  如上圖,我們定義一個結構體: 1,2,3,4,5是結構體資料。a,b,c,d,e則是指標變

軟體素材---linux C語言拼接字串函式 strcat的用例(與char陣列聯合使用挺好)

【標頭檔案】#include <string.h> 【原型】 1 char *strcat(char *dest, const char *src); 【引數】: dest 為目標字串指標,src 為源字串指標。

c語言第一次作業,分支,順序結構

1.本章學習總結(2分) 1.1 思維導圖 1.2 本章學習體會及程式碼量學習體會 1.2.1 學習體會 學了幾節課的c語言了,因為沒自學的原因,跟不上進度。對於c語言現在挺有興趣的,願意去花時間去彌補。最近才搞懂了scanf和int的確切含義。之前老是把int以為是輸入。對於for()括號裡面的成分

C語言存取結構體成員的點運算子(.)和箭頭運算子(->)的區別

一直以為這兩個是沒有什麼區別的,可以相互替換,今天又翻了一下《C語言核心技術》,明白了其中的奧妙。 相同點:兩個都是二元操作符,其右操作符是成員的名稱。 不同點:點操作符左邊的運算元是一個“結果為結構”的表示式; 箭頭操作符左邊的運算元是

C語言陣列指標總結

#include<stdio.h> //int (*brr)[3] 陣列指標 //int *brr[3] 指標陣列 int main() { int brr[2][3] = {1,2,3,4,5,6}; printf("brr == %

C語言大小寫不敏感字串比較

自己寫的: #include <stdio.h> int strcmpl(char a[],char b[]) { int i,flag=0; for(i=0;a[i]!='\0'||b[i]!='\0';i++) { if(a[i]-

C語言最值

題目: #include <stdio.h> int main() { int n,a[10000],i=0,max,min,t; scanf("%d",&n); while(scanf("%d",&a[i])!=EOF) i++; max=

C語言分支結構程式

一.關係運算符和表示式 在程式中經常需要比較兩個量的大小關係,以決定程式下一步的工作。比較兩個量的運算子稱為關係運算符。 (1)關係運算符及優先次序 在C語言中有以下關係運算符: 1.< 小於 2. <= 小於或等於 3. > 大於 4. &g

C 語言 陣列元素擴大n倍

#include <stdio.h> #define N 10 void Mularray1(int a[],int b); void Mularray2(int *aPtr,int b); void main(){ int a[N] = {1,2,3,4

C語言控制結構與流程圖

任務程式碼: #include <stdio.h> #include <math.h> int main() { float fHeight,fStandar_Weight