黑馬程式設計師 c語言結構體介紹

2021-07-02 18:33:36 字數 1864 閱讀 7970

結構體(構造型別:陣列):

陣列:只能由多個相同型別的資料構成

結構體:可以由多個不同的型別的資料

結構體型別 結構體變數名

1.定義結構體型別

struct person

;2.根據結構體型別,定義結構體變數

struct person p = ; //p為結構體變數

單獨賦值:

p.age = 30;

p.name = "rose";

只能在定義結構體/陣列的同時賦值

錯誤寫法:

struct person p2;

p2 =

正確寫法:

struct person p2 = ;

struct person p2 = ;

記憶體分析:

1.定義結構體型別;

struct date

;// 僅僅定義型別,並不會分配儲存空間

2.定義結構體變數:// 真正分配儲存空間

struct date d1 = ;

int s = sizeof(d1);//此結構體型別占用12位元組

printf("%p  %p  %p", &d1.year, &d1.month, &d1.day);

//輸出位址,之間相差4個位元組

d2 = d1; //會將d1所有成員值賦給d2對應值

struct student stu

;//佔16個位元組 ,必須是最大位元組的倍數

//補齊演算法(對其演算法)

定義結構體變數(3種方式):

1.先定義型別,在定義變數

struct student stu

;struct student stu =

2.定義型別的同時定義變數

struct person

stu; // 定義型別的同時,定義變數

結構體型別不能重複定義

3.定義型別的同時定義變數(省略了型別名稱)

structstu; // 這樣定義也是正確的

結構體型別也是有作用域的,從定義型別的哪一行開始,一直到**塊結束

結構體型別的作用域:

定義在函式外面,全域性有效(從定義型別的那行開始,一直到檔案結尾)

定義在函式(**塊)內部,區域性有效(從定義型別的那行開始,一直到**塊結束)

結構體陣列:

struct rankrecord

;//int ages[3] = ;

struct rankrecord records[3] = ,,

};records[0] = ;//這樣錯誤

record[0].no = 4;

for (int i=1; i<3; i++)

指向結構體的指標:

struct student

;struct student stu = ;

struct student *p;

p = &stu;

//第一種方式

printf("age = %d, no = %d\n", stu.age, stu.no);

//第二種方式

printf("age = %d, no = %d\n", (*p).age, (*p).no);

//第三種方式

printf("age = %d, no = %d\n", p->age, p->no);

指向結構體的指標的定義:

struct student *p;

利用指標訪問結構體的成員:

(*p).成員變數

p->成員變數

結構體的巢狀:

int main()

;struct student

;struct studend stu = , };

}

黑馬程式設計師 C語言 結構體

android培訓 ios培訓 期待與您交流!結構體的作用 結構體是一種構造型別,使用非常頻繁。當我們需要把不同型別的資料構成乙個整體時,便會用到結構體了。結構體型別的定義 注意 在函式裡面或者外面都可以定義 影響作用域為全域性型別或者區域性型別 舉例 struct person 此時只是定義了乙個...

黑馬程式設計師 C語言 結構體 列舉

asp.net unity開發 net培訓 期待與您交流!定義乙個名為student的結構體,定義型別時系統並沒有為它分配記憶體 struct student 儲存的位址是連續的,按定義順序排 定義乙個結構體變數,此時系統為stu分配了記憶體 struct student stu 所有成員佔的儲存空...

《黑馬程式設計師》 結構體struct (C語言)

數 組 只能由多個相同型別的資料組成 結構體 可以由多種不同型別的資料組成 練習 include int main 2.根據結構體型別,定義結構體變數 真正分配儲存空間 struct person p p.age 30 修改結構體元素的值 p.name rose printf age d,name ...