一、結構體的定義
結構體又稱為自定義資料型別
定義格式:struct 型別名
struct關鍵字
在此,我們應該注意的是:
1、自定義資料型別定義完成以後等同於內建型別
2、結構體不能定義乙個自身的普通成員變數,但可以定義乙個指向自身的指標變數
看以下例子:
struct student
;struct a
;struct b
;
二、結構體的使用
在上述定義中,定義了學生的結構體,
那麼如何對結構體進行初始化以及如何訪問結構體中的成員呢?
看下面的例子:
int main()
; struct student stu3=;
//由於結構體是聚合型別,則當只初始化一部分時,剩餘部分預設值為0.在此處age=0
stu3.age = 30;
strcpy(stu3.name,"zhaosi");//此處用字串拷貝函式對其進行修改
struct student *pstu = &stu2;
*pstu.age = 35;//error("."的優先順序高於"*",但在這裡應該先對pstu進行解引用後在進行"."操作)
(*pstu).age = 35;//ok
pstu -> age = 35;
//對於指標,我們一般使用"->"進行成員的訪問
strcpy(pstu->name,"zhangfei");
show(&stu2);
}void show(const struct student *pstu)
//結構體的列印函式。
總結:
結構體普通變數通過"."號訪問它的成員,結構體指標變數通過"->"號訪問它的成員。
三、引入typedef
在上述結構體變數指標的定義中,用到的都是"struct 型別名 變數名"這樣的格式,
但是我們也可以用typedef定義結構體,更加方便。
下面我們通過以下;例子了解一下typedef的作用:
typedef unsigned long long int uint64;
typedef int * pint;//定義乙個整型指標的資料型別pint
typedef int arr[10];//定義乙個長度為10的整型陣列的資料型別arr
typedef int(*pfun)(int,int);//函式指標的資料型別
這裡,我們可以將typedef和巨集定義進行乙個比較,實際上兩者並無任何關係
typedef int * pint;//《型別定義》
# define int * pint//《字元替換》
pint i,j;//i,j,都是int *。
pint x,y;//在這裡x為int *,y為int型別。
那麼,利用typedef重新定義乙個結構體型別的方式為:
typedef struct student student;
/*在應用時,我們可以直接寫成student b,
通過student定義乙個普通變數b,等價於struct student b;
*/
同樣,也可以在定義結構體時定義:
typedef struct arr
a;
對於typedef的總結:
格式:typedef 資料型別 新資料型別
理解其含義時,我們可以通過兩步:一是去掉typedef,檢視定義的變數型別,
二是加上typedef,將變數上公升為資料型別
GO結構體初識
package main import fmt 結構體 結構體 是由一系列具有相同型別或不同型別的資料構成的資料集合 結構體成員是由一系列的成員變數構成,這些成員變數也被稱為 字段 func main p2.name 狗子 p2.age 22 p2.男 p2.address 中國 fmt.print...
初識C語言結構體
目錄 1 之前int char等型別描述的結構體非常單一,只可描述一種型別。2 陣列也是描述同一型別的集合,只可描述一種型別。3 而結構體使得c語言可以描述複雜型別,比如學生型別 包含學生的名字 年齡 性別 號等資訊 結構體和陣列的區別 2.1結構體型別的定義 格式 struct stu 結構體型別...
結構體型別 結構體變數 結構體陣列 結構體指標
問題1 一元錢換為1 2 5分的硬幣,有多少種兌換方?本題要點分析及參 對各種可能情況進行一一測試。這是實現迴圈的一種方式 窮舉法 但實際上只有只有餘額才能兌換成其它面值的硬幣 main 注意換行的控制和每列的對齊 問題3 某鐵路線上有10個站,需要準備多少種客票?main b a 0 p prin...