C語言第九課

2021-06-26 21:51:21 字數 1593 閱讀 8907

主要內容:高階指標(結構體指標)

一、結構體指標

指向結構體變數的指標叫做結構體指標

typedef   struct   student  student ;

student  stu  = ;

student  *p = &stu ;

student  *:結構體型別的指標(型別)

p:結構體指標變數(變數名)

結構體訪問成員變數

示例:typedef  struct    student;

student  stu1 = ;

student  stu2 = ;

student  *p1 = &stu1;

student  *p2 = &stu2;

printf("%s %c %d",p1.name,  p1.gender,  p1.age); / / 方式一

printf("%s %c %d",p2 ->name, p2 ->gender, p2.age); / / 方式二

注意:(*p)對結構體取值後是結構體變數

. gender是訪問成員變數

使用指標 「 -> 」 可以直接訪問結構體的成員變數  p2 ->name

二、結構體陣列與指標的關係

結構體陣列的陣列名是乙個結構體指標常量

student  stus   =  ;

student  *p  = stus;

p 為結構體指標變數,stus為陣列名,

等同於 int  arr[2] = ; int *p = arr; 

結構體指標訪問陣列內元素使用下標

p ->陣列內容   訪問陣列元素

(p + 1)-> 陣列內容將指標向下移動所定義陣列型別的位元組數

(p - 1)->陣列內容將指標向上移動所定義陣列型別的位元組數

結構體指標作為函式引數時:

函式操控結構體指標時,需要傳入結構體指標首位址和元素個數

三、預編譯指令

巨集定義:在編譯前進行替換

#define  pii  3.14  / / 將pii的值定為3.14在以後程式執行期間,pii = 3.14

注意:巨集不是變數

帶引數的巨集

示例:#define   max ( a, b)   ( a > b ? a : b )  / / 相當於乙個函式

max ( 3, 5)  / / 編譯輸出5

四、條件編譯(不常用)

根據不同的條件編譯不同的**

三種形式:

1  #ifdef   標示符

**段1

#else

**段2

#endif

如果標示符被#ifdef過,執行**段1,否則執行**段2

2   #ifndef   標示符

**段1

#else

**段2

#endif

如果標示符未被#define過,執行**段1,否則執行**段2

3   #if  常量表示式

**段1

#else

**段2

#endif

如果常量表示式結果為非0執行**段1,否則執行**段2

C語言第九課

儲存類 為變數提供了5種不同的儲存型別,即儲存類 按 以下的描述 儲存時期 作用域 鏈結static 的區域性變數 活死人為靜態變數 儲存類 1 自動變數 區域性變數 2 暫存器變數 用register 宣告為 暫存器變數 3 具有 塊作用域的靜態變數 static 區域性變數 4 具有外部鏈結的靜...

C語言 第九課

一 c語言的資料型別包括基本型別 整形,字元型,浮點型 指標型別 構造型別 陣列 共用體 結構體 列舉型別 和空型別。二 結構型別的宣告格式 struct 結構名 注意 color blue 大括號最後的分號不能忘記。color 三 宣告結構變數及賦初值 struct 結構名 結構變數 四 訪問乙個...

第九課 變數

任務與 修改 沒有定義變數r,在第四行float r1,r2之後加上r就可以 include include intmain 閱讀程式 閱讀下面的程式,在閱讀過程中,請為每乙個變數畫出乙個方框,代表對應的記憶體空間。隨著閱讀,標明變數的變化過程,達到讀懂程式的目的。include intmain 圖...