C語言結構體 struct 理解

2021-07-05 00:15:09 字數 2396 閱讀 9108

基本定義:結構體指的是一種資料結構,是聚合資料型別的一類,通俗講就像是打包封裝,把一些變數有共同特徵(比如同屬於某一類事物的屬性)的變數封裝在

內部,通過一定

方法訪問修改內部變數。

一、結構體的定義:

1.簡單的結構體定義

struct student;

2.附加變數初始化的結構體定義(為結構體定義乙個別名)

struct studentstu;
這就跟下面這個是等效的:

struct student;  

struct student stu;

3.如果結構體只需要定義乙個變數stu,不需要再去定義第二個變數,那麼可以簡寫:

struct stu;

注意:結構體內部的成員可以是任意型別的,但是不能巢狀自己!!比如說:

struct student;

二、結構體變數及其內部成員變數的定義及訪問:

1.結構體的宣告:

struct student student;

2.結構體的成員變數的定義可以隨宣告進行:

struct student student = ;

3.結構體之間可以互相賦值:

struct student stu = student;

4.單獨為結構體的成員變數賦值:

stu.name[0]='z';

stu.name[1]='h';

.....

stu.age=15;

stu.number=001;

三、訪問元素:

結構體中訪問成員是通過變數名.成員名,如下所示

// 定義結構體型別  

struct student;

// 定義結構體型別

struct student stu = ;

// 獲取stu這個變數的age值

int num2 = stu.age;

四、結構體指標:

1.結構體指標,定義結構體指標跟定義結構體變數一樣,首先必須定義結構體型別,如下所示:

// 定義結構體型別  

struct student;

// 定義結構體變數

struct student stu = ;

// 定義結構體指標

struct student *p = &stu;

2.同樣的定義了結構體指標,訪問結構體變數的成員又多了幾種方法,如下所示:

/ 定義結構體型別  

struct student;

// 定義結構體變數

struct student stu = ;

// 定義結構體指標

struct student *p = &stu;

// 訪問結構體變數的成員可以用stu.age,p->age,(*p).age

printf("%d==%d==%d\n", stu.age, p->age, (*p).age);

五、占用記憶體空間:

struct結構體,在結構體定義的時候不能申請記憶體空間,不過如果是結構體變數,宣告的時候就可以分配。

結構體的大小是結構體所含變數大小的總和,並且不能用"char a"這種彈性(flexible)變數,必須明確大小,下面列印輸出上述結構體的size:

printf("size of struct stu:%d\n",sizeof(struct stu));  

printf("size:%d\n",sizeof(student));

結果都是28:分別是char陣列20,int變數4*2.

和c++的類不一樣,結構體不可以給結構體內部變數初始化,。

如下,為錯誤示範:

#include//直接帶變數名student

struct studentstudent;

ps:結構體的宣告也要注意位置的,作用域不一樣。

C語言結構體struct

定義 定義結構體,要定義兩次,1定義型別,2定義變數 1定義時 不分配記憶體,和 define一樣 定義結構體的樣式,叫什麼名字,成員,句式 2再定義 分配記憶體 用著個樣式定義變數 與typedef有點像 3如果定義的是 p指標,只表示出此結構體 變數的起始位址 struct a struct a...

C語言結構體(Struct)

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

C語言 結構體struct 結構體對齊

1 定義乙個結構體 順便例項結構體變數 struct tag 結構體型別名 struct tag 這兩者共同構成了結構體型別 單獨的tag 結構體型別名 不能稱之為結構體型別 結構體變數名 2 定義的同時使用typedef 相當於定義結構體 為結構體起新名字 typedef struct tag 結...