主要內容:高階指標(結構體指標)
一、結構體指標
指向結構體變數的指標叫做結構體指標
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 圖...