- printf格式化輸出到屏幕
printf("輸出控制符", 輸出參數(shù)),輸出控制符包括:%d, %ld, %f, %lf, %c, %x(%X, %#x, %#X), %s等。 - scanf
scanf("輸入控制符", 輸入?yún)?shù)),對于變量需要前面加&,比如int i; &i表示i的地址,&是取地址符。
scanf中的非輸入控制符必須原樣輸入,scanf中盡量不要使用非輸入控制符。 - 運算符
算術(shù)運算符:+ - * / %
關(guān)系運算符:>, >=, <, <=, !=, ==
邏輯運算符:!, &&, ||,&&的左邊是假時右邊不執(zhí)行,||的左右是真時右邊不執(zhí)行
賦值運算符:=, +=, -=, *=, /=
優(yōu)先級:算術(shù)運算符 > 關(guān)系 > 邏輯 > 賦值 - 真假的處理
非0就是真,0就是假,真用1表示,假用0表示 - 流程控制
if,if。。。else,if。。。else if。。。else - 循環(huán)語句
for,while,do...while - switch語句
switch(value) {
case 1:
語句1;
// break;
case 2:
語句2;
break;
default:
語句3;
break;
}
如果注釋掉case1的break,則會執(zhí)行語句1和語句2,因為一旦找到入口之后,后邊就是順序執(zhí)行了。
- 指針
int * p,p是指針變量,int 是p的類型,p = &i,p就是指向i的指針(地址),p = i,*p表示p指向的變量。
一維數(shù)組名是指針常量,它存放的是一維數(shù)組第一個元素的地址。
int a[3] = {1, 2, 3};
*a 等于 a[1]
*(a + i) 等于 a[i]
sizeof(數(shù)據(jù)類型)或sizeof(變量名)可以輸出對應(yīng)內(nèi)容所占的字節(jié)數(shù)。
一個指針變量的大小為4個字節(jié)。
指針變量指向的是變量首字節(jié)的地址。
- 動態(tài)內(nèi)存分配
要使用malloc函數(shù),必須添加<malloc.h>頭文件;
malloc(4)表示請求系統(tǒng)分配4個字節(jié);
malloc(4)函數(shù)只能返回第一個字節(jié)的地址;
(int *)malloc(4)進(jìn)行強制類型轉(zhuǎn)換,告訴它指向的地址占幾個字節(jié);
int * p = (int *)malloc(4);
free(p)會釋放p所指向的內(nèi)存;
動態(tài)構(gòu)造一維數(shù)組
int main(void) {
int * pAtrr;
int len;
printf("please input length of array!\n");
scanf("%d", &len);
pAtrr = (int *)malloc(4 * len);
for (int i = 0; i < len; i++) {
pAtrr[i] = i + 3;
}
for (int i = 0; i < len; i++)
{
printf("p[%d] = %d\n", i, pAtrr[i]);
}
return 0;
}
- 多級指針
int main(void) {
int i = 10;
int * p = &i;
int ** q = &p;
int *** r = &q;
printf("i = %d\n", ***r);
return 0;
}
- 結(jié)構(gòu)體
struct Student
{
int age;
float score;
char sex;
};
struct Student st2 = {20, 86, 'M'};
st2.age
struct Student *s = &st2;
s -> age = 30;
s -> score = 60;
s -> sex = 'F';
結(jié)構(gòu)體變量可以在初始化時賦值,結(jié)構(gòu)體指針變量感覺和基本數(shù)據(jù)類型指針變量類似。
s -> age在計算機內(nèi)部會被轉(zhuǎn)化為(*s).age,它的含義是s指向的結(jié)構(gòu)體變量的age成員。
- 枚舉
enum Weekday {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};
int main(void) {
enum Weekday day = Friday;
return 0;
}
參考: