知識點概括:
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 在使用基本型別做函式引數時是把實參的值傳遞給形參,在被調函式中形參值的改變不能改變主函式中實參的值,如下 這個程式是想通...