標籤:style blog color 使用 os 檔案
- 如果*p被()包住,說明指標變數p將來指向的是函數
//聲明一個指標變數 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,說明指標變數p將來指向的是函數 // 最左邊的void說明p指向的函數沒有傳回值 // 最右邊的()說明p指向的函數沒有形參 void (*p)(); // 函數名test就是test函數的地址 // 將test函數的地址賦值給了指標變數p // 指標變數p成功指向了test函數 p = test; // 利用指標變數p間接調用了test函數 //(*p)(); //test(); p();
預設情況下,一個結構體變數所佔有的儲存空間是所有成員的總和。
sizeof計算的結構體所佔用儲存空間時,返回的值必須是最大成員的倍數。
省略了結構體的名稱,這種方法沒有重用性。
在結構圖的最後加入的內容是 同時定義的變數。
struct { double width; double height; } s;
注意: 如果想給結構體使用{}的方式一次性賦值,只能在定義變數的同事進行。
- 結構體作為函數參數時,只是成員的值傳遞(修改函數內部的結構體,並不影響外面的結構體)
struct Person { int age;};// 這種方式是值傳遞, 不會真的改變nochange的值void changePersonWithAge1(struct Person nochange) { nochange.age = 100;}// 這種傳遞的是指標,指標指向同一個內容,可以真正改變void changePersonWithAge2(struct Person *change) {// (*change).age = 100; change->age = 100; // 等價於上面那行。}int main(){ struct Person p1 = {5};// changePersonWithAge1(p1); changePersonWithAge2(&p1); // 引用傳遞,要傳遞指標 printf("%d\n", p1.age);}
#define 宏名 值
#undef 宏名
作用:宏替換,在翻譯之前,將代碼中的所有宏名都替換成對應的值。
宏名最好都用大寫,跟函數區分開。可以使用在任何地方(程式碼片段中,頭部,任何地方)
// 帶參數的宏定義// 宏替換隻是純粹的文本替換,把左邊的宏換成右邊的東西,並不會進行任何運算// 參數和結構都必須用()包住#define PING_FANG(x) ((x)*(x))
不能遞迴包含: 自己包含自己,a.h include a.h
不能交叉包含:a.h incldue b.h, b.h include a.h
防止.h的檔案內容被包含多次。用預先處理命令。 檔案名稱用A_H的方式來定義。
#ifndef 檔案名稱 #define 檔案名稱 ..檔案內容.. #endif
typedef int Myint
typedef char * String1
struct Person { int age;};// 給結構體類型起個別名 :Stutypedef struct Person Student;// 此結構類似與上面的內容。 是上面兩行的縮寫typedef struct Dog { int age} WangCai;
需要間接的修改某個變數的值。