IOS成長中 C語言之指標二

2021-06-23 02:44:06 字數 3901 閱讀 3058

知識點概括:

1.結構體指標

2.條件編譯

3.巨集#import 與 #include相比,能防止重複匯入,保證內容只複製一次

巨集 只做替換(預編譯器)

使用巨集應注意的幾個問題:

(1)定義巨集時最後不能加分號(分號也會替換內容的一部分)

(2)引數要加括號

(3)對於有參巨集,巨集名與括號之間不能加空格

結構體指標訪問結構體成員,通過指向操作符,例如:結構體指標變數->結構體成員

條件編譯,根據不同的條件來編譯不同的**,編譯器會將原檔案編譯成二進位制指令,存放在**區,條件編譯經常用來除錯程式

//#import 與 #include 相比,能否防止重複匯入,保證內容只複製一次

//#import "a.h"

//#include "a.h"

//#include "a.h"

//#include "a.h"

//#ifndef lessonpointerhigher_a_h

//#define lessonpointerhigher_a_h

//int maxvalue(int x, int y)

//#endif

//#ifndef lessonpointerhigher_a_h

//#define lessonpointerhigher_a_h

//int maxvalue(int x, int y)

//#endif

//#ifndef lessonpointerhigher_a_h

//#define lessonpointerhigher_a_h

//int maxvalue(int x, int y)

//#endif

//巨集 只做替換(預編譯器)

//命名規則: 純大寫 或者 k+駝峰(多個單詞組成,每個單詞的首字母大寫)

//#define 用來定義巨集 count 巨集名

//#define count 10

//#define sum(a,b) (a * b)

//使用巨集應注意的幾個問題:

//(1)定義巨集時最後不能加分號(分號也會替換內容的一部分)

//(2)引數要加括號

//(3)對於有參巨集,巨集名與括號之間不能加空格

//typedef struct student student;

////typedef struct point cpoint;

////#define aaaa

//結構體指標

// student xiaoguang = ;

// printf("%s\n", xiaoguang.name);

// student *pstu = null; //結構體指標變數

// pstu = &xiaoguang;

// //結構體指標訪問結構體成員,通過指向操作符,例如:結構體指標變數->結構體成員

// pstu->age = 18;

// printf("%d\n", pstu->age);

// strcpy(pstu->name, "xianghuang");

// printf("%s\n", pstu->name);

pstu++; //增加的是整個結構體的大小

// //*pstu 和 結構體變數 xiaoguang 的功能是一樣的 都是獲取到整個結構體的內容

// (*pstu).age = 88;

// printf("%d\n", (*pstu).age);

// (*pstu).score = 0;

// printf("%.1f\n", (*pstu).score);

// cpoint a = ;

// cpoint b = ;

// cpoint *pa = null;

// cpoint *pb = null;

// pa = &a;

// pb = &b;

// float dx = (*pa).x - (*pa).x;

// float dy = (*pa).y - (*pb).y;

// float length = 0; //儲存距離

// length = sqrt(pow(dx, dy));

// printf("a---b = %.1f", length);

//定義學生結構體陣列

// student stu[5] = ,

// ,

// ,

// ,

//

// };

student *pstu = null;

pstu = stu;

// pstu->score; //訪問第乙個學生的成績

// (pstu + 2)->name; //訪問第三個學生的姓名;

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

// for (int i = 0; i < 5; i++)

// }

// int a[count] = ;

// for (int i = 0; i < count; i++)

// for (int i = 0; i < count - 1; i++)

// }

// }

// for (int i = 0; i < count; i++)

// int sum = sum(3 + 2, 10) * sum(3 + 2, 10);

// printf("%d\n", sum);

//條件編譯,根據不同的條件來編譯不同的**,編譯器會將原檔案編譯成二進位制指令,存放在**區,條件編譯經常用來除錯程式

//條件編譯 第一種格式

//#ifdef 識別符號 **段1; #else **段2; #endif

//如果識別符號通過#define定義過,則編譯**段1,否則編譯**段2,#endif是條件編譯的結束標誌

//#ifdef aaaa

// int a = 10;

//#else

// int a = 20;

//#endif

// printf("%d\n", a);

//條件編譯第二種格式

//#ifndef 識別符號 **段1; #else **段2; #endif

//如果識別符號沒通過#define定義過,則編譯**段1,否則編譯**段2,#endif是條件編譯的結束標誌

//#ifndef aaaa

// int b = 10;

//#else

// int b = 20;

//#endif

// printf("%d\n", b);

//條件編譯低三種格式

//#if 常量表示式 **段1 #else **段2 #dendif

//如果 常量表示式結果非0 編譯器編譯**段1 否則編譯**段2

IOS成長中 C語言之陣列二

知識點概括 1.二維陣列 2.字串陣列 3.多維陣列 多維陣列理論上 維數可以任意。多維陣列的元素個數 各維數個數乘積。多維陣列占用記憶體 元素個數 乘以 單個元素所佔空間。字串陣列實質是乙個二維字元陣列,注意每個字串的長度不能超過第二個維度的長度 1。二維陣列的定義和一維陣列的定義非常相似,只不過...

C語言之指標二

函式指標 如果在程式定義了乙個函式,在編譯時,編譯系統為函式 分配一段儲存空間,這段儲存空間的起始位址,稱為這個函式的指標 函式名就是函式開始的位址 函式二級指標可以修改函式指標的指向 函式指標,不僅僅是位址,必須明確函式指標型別和輸出引數型別和數量 函式名可以作為引數傳遞給函式指標 include...

C語言之指標(二)

二 指標變數做函式引數 在使用函式時我們一般都使用的是基本型別做函式引數,如 int double float等等。那在使用指標變數做函式引數和基本型別做函式引數有什麼不同呢?1 在使用基本型別做函式引數時是把實參的值傳遞給形參,在被調函式中形參值的改變不能改變主函式中實參的值,如下 這個程式是想通...