C語言學習之結構體等

2021-07-09 14:00:17 字數 2898 閱讀 7399

結 構 體

1.結構體的定義

struct 結構體名

;2.結構體的初始化

1.有名結構體初始化

1.全部初始化

struct student

;struct student a = ;

2.部分初始化

struct student a = ;

3.定義結構體時初始化定義變數

struct student

a = ;

2.無名結構體初始化

1.全部初始化

struct

a = ;

2.部分初始化

struct

a = ;

3.結構體的訪問

1.通過結構體變數名訪問

a.name

a.***

a.num

a.score

2.通過結構體指標訪問

ps->name

ps->***

ps->num

ps->score

4.結構體成員變數的操作

從終端接收乙個學生的姓名、性別、學號、成績

存放在乙個結構體當中,並且在終端上列印除輸

入的所有資訊

結構體1.結構體在記憶體中的儲存

1.記憶體對齊

1.成員變數只能存放在位址為自身

型別基本長度整數倍的記憶體位址單

元當中2.結構體型別的長度必須是成員變

量中最大基本型別的整數倍

2.記憶體中有3中對齊方式

1.位元組對齊

2.半字對齊

3.字對齊

共用體1.概念

共用體內部的成員變數共同使用同一塊記憶體空間

共用體中儲存的資料是上次賦值後的成員變數值

2.儲存

記憶體大小端:

記憶體低位址存放低資料位叫做小端

記憶體低位址存放高資料位叫做大端 列舉

enum weekday;

enum weekday day = 0;

指標高階

1.一級指標:指向乙個普通變數的指標,儲存的是變數

的記憶體位址編號

2.二級指標:指向乙個指標變數的指標,儲存的是指標

變數的記憶體位址編號

3.const 唯讀型別

1. const int *p;

2. int const *p;

3. int * const p;

4. const int * const p;

5. int const * const p;

1. 1和2屬於同一種形式,它們將*p修飾成為唯讀

型別沒有辦法通過指標變數p修改對應記憶體位址

單元中的值,但是可以通過直接使用變數名修改

對應記憶體單元中的值

2. 3中const修飾指標變數p,此時p必須初始化,否

則將無法改變指標變數p中的值,但是可以利用

指標p改變其對應記憶體單元中的值

3.  4和5屬於同一種形式,他們將*p和p修飾成唯讀

型別,既沒有辦法修改p中的值,也沒有辦法修

改指標變數p對應的記憶體單元的值,注意定義該

型別指標變數p時,必須初始化

4.void指標

char *p = &ch;

int *q = null;

q = p;

不僅能把位址賦值給void型指標,並且還能把指標

的型別賦值給void型指標,所以void型指標既可以

變成char*指標也可以變成int*指標,還可以變成其

餘型別的指標

5.陣列指標和指標陣列

1.陣列指標是乙個指標,該指標指向乙個陣列

陣列指標佔4個位元組記憶體空間,空間中儲存的是

乙個指向陣列的位址

int (*p)[5];

定義了乙個陣列指標p,p變數佔4個位元組儲存空間,

但是該指標指向乙個5個元素的整型陣列

2.指標陣列是乙個陣列,該陣列中儲存的元素都為

指標型別

指標陣列的大小由陣列元素的個數來決定,每個

元素中儲存的值都為乙個位址

int *p[5];

定義了乙個指標陣列,陣列名為p,指標陣列佔

20個自己的連續空間,並且每個元素都儲存了

指向乙個整型變數的指標

6.陣列和指標的關係

1.一維陣列和指標的關係

一維陣列的陣列名就是指向陣列第乙個元素的

指標int a[5];

int *p = a;

a[n] = *(a+n) = *(p+n) = p[n]

2.二位陣列和指標的關係

行指標二維陣列中,指向每一行的乙個指標叫做

行指標

a[0]是指向第一行元素的乙個列指標

int a[3][4];

int *p = a[0];

第n行第m個元素

a[n-1][m-1] = *(a[n-1]+m-1) = *(p+(n-1)*總列數+m-1)

二位陣列陣列名是指向二位陣列的乙個行指標

該行指標指向第一行的列指標,a+1則指向第二

行的列指標

使用a訪問第n行第m個元素

a[n-1][m-1] = *(*(a+n-1)+m-1)

行指標和陣列指標的關係

行指標就是指向乙個陣列的陣列指標,只不過

該陣列就是二位陣列的一行

int a[3][4];

int (*p)[4] = a;

二維陣列的陣列名是指向第一行元素陣列的一

個陣列指標

int a[3][4];

int (*p)[4] = a;

int *p = a[0];

int *p = *a;

int *p = &a[0][0];

int (*p)[4] = &a[0];

C語言學習 結構體

include include include 宣告結構體 struct student student結構體名 int age char int main 初始化結構體變數 bbbb strcpy s1.name,bbbb s1.age 22 s1.m 列印結構體變數,逐個列印 printf s ...

C語言學習 結構體

題目要求 學生的記錄由學號 姓名 專業組成,根據班級人數,將學生記錄存放在結構體陣列中,由於部分同學轉專業,學生記錄發生了變化,請程式設計實現根據學號查詢查詢學生並修改專業,分別輸出轉專業和未轉專業的學生記錄。要求 班級人數 學生記錄均由鍵盤輸入 include define m 100 要求 1....

c語言學習結構體

結構體格式 struct 結構體名稱 結構體是一種集合,它裡面包含了多個變數或陣列,資料型別可以相同也可以不相同。eg可以包含乙個人的身高 double 體重 int 顏值 char ii 21 結構體的定義如下所示,struct為結構體關鍵字,tag為結構體的標誌,member list為結構體成...