C 自學筆記

2021-10-06 21:47:57 字數 3353 閱讀 3226

本次記錄結構體,還請各位大佬批評指正!

結構體屬於使用者自定義的資料型別,允許使用者儲存不同的資料型別(整型、浮點型、字元型、布林型),即不同資料型別的集合所組成的乙個型別。

建立學生資料型別,然後通過學生資料型別建立具體的學生。通過結構體建立變數的方式有三種:

1、struct 結構體名 變數名;

2、struct 結構體命 變數名 = ;

3、定義結構體時順便建立變數;

需要注意的是:

(1)第

一、二種用的較多。

(2)定義時struct不可以省略,建立變數時可以省略。結構體變數利用操作符"."訪問內部成員。

#include#include #includeusing namespace std;

//學生結構體定義

struct student

s3; //第三種 定義結構體時順便建立變數

int main()

; cout << "姓名:" << s1.name << "年齡:" << s1.age << "分數:" << s1.score << endl;

//第三種 在學生結構體定義的時候已經建立了s3

s3.name = "王五";

s3.age = 20;

s3.score = 90;

cout << "姓名:" << s3.name << "年齡:" << s3.age << "分數:" << s3.score << endl;

system("pause");

return 0;

}

將自定義的結構體放入陣列中方便維護。

struct 結構體名 陣列名[元素個數]=,,… };

struct student arr[3] =

, ,

};//修改結構體陣列中的元素資訊

/*arr[1].name = "暗六";

arr[1].age = 28;

arr[1].score = 59;*/

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

通過指標訪問結構體中的元素。

利用操作符 -> 可以結構體指標訪問結構體元素屬性。

struct student s = ;

struct student * p = &s; //struct可以省略

cout << "姓名:" << p->name << "年齡:" << p->age << "分數:" << p->score << endl;

結構體中的成員可以是另乙個結構體,用來解決一些實際問題。

例:每個老師輔導乙個學生,乙個老師的結構體中,記錄乙個學生的結構體。

#include#include #includeusing namespace std;

//學生結構體定義

struct student

;//教師結構體定義

struct teacher

;int main()

將結構體作為引數向函式中傳遞 如果不想修改主函式中的資料,用值傳遞,反之用位址傳遞。

#include#include #includeusing namespace std;

//學生結構體定義

struct student

;//列印學生資訊的函式

//1、值傳遞

void prints1(struct student s1)

//2、位址傳遞

void prints2(struct student * p)

int main()

用const來防止誤操作。

#include#include #includeusing namespace std;

//學生結構體定義

struct student

;//const使用場景

void prints3(const student * s3)//將函式中的形參改為指標,可以減少記憶體,而且不會幅值新的副本出來

int main()

; prints3(&s3);

system("pause");

return 0;

}

學校正在做畢設專案,每名老師帶領6個學生,總共3名老師,需求如下:

(1)設計學生和老師的結構體,其中在老師的結構體中,有老師姓名和乙個存放6名學生的陣列作為成員。

(2)學生的成員有姓名、考試分數,建立陣列存放3名老師,通過函式給每個老師及所帶的學生賦值。

(3)最重列印出老師資料以及所帶學生的資料。

#include#include #include#includeusing namespace std;

//學生結構體定義

struct student

;//教師結構體定義

struct teacher

;//給老師和學生資訊賦值

void allocatespace(struct teacher tarr, int len) }}

//列印

void print(struct teacher tarr, int len) }}

int main()

設計乙個英雄的結構體,包括成員姓名、年齡、性別;建立結構體陣列,陣列中存放5名英雄。並通過氣泡排序的演算法,將陣列中的英雄按照年齡進行公升序排序,列印最終排序後的結果。

#include#include #includeusing namespace std;

//英雄結構體定義

struct hero

;//氣泡排序 實現年齡公升序排列

void bubblesort(struct hero harr, int len)

} }}//列印排序後的陣列資訊

void print(struct hero harr, int len)

}int main(), ,

, ,};

int len = sizeof(harr) / sizeof(harr[0]);

//排序前結果

cout << "排序前結果為:" << endl;

for (int i = 0; i < len; i++)

bubblesort(harr, len);

//排序後結果

cout << "排序會後結果為:" << endl;

print(harr, len);

system("pause");

return 0;

}

C 自學筆記

本次記錄程式的記憶體分割槽模型,還請各位大佬批評指正!c 程式在執行時,將記憶體大方向劃分為4個區域 1 區 存放函式體的二進位制 有作業系統進行管理 寫的所有 放在該區域 2 全域性區 存放全域性變數和靜態變數以及常量 3 棧區 由編譯器自動分配釋放,存放函式的引數值,區域性變數 4 堆區 由程式...

C 自學筆記

本次記錄函式提高,還請各位大佬批評指正!在c 中,函式的形參列表中的形參是可以有預設值的。語法 返回值型別 函式名 引數 預設值 注意事項 1 如果某個位置有預設引數,那麼從這個位置之後,從左往右都必須有預設值。2 如果函式的宣告有預設引數,那麼函式的實現就不能有預設引數。宣告和實現只能有乙個有預設...

C 自學筆記

筆記整理自 菜鳥c 教程 物件導向,區分大小寫 寫法 include 或include stdio.h iostream.h iostream的區別 static 區域性變數,檔案內全域性變數 extern 所有檔案可見變數 thread local 執行緒內變數 值 i j,實參i,形參j,i賦值...