初識結構體

2021-08-19 15:31:46 字數 1871 閱讀 6939

一、結構體的定義

結構體又稱為自定義資料型別

定義格式: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...