#include < > 和#include " "的區別:
- #include < >編譯器在預設目錄中搜索頭文件,一般是庫文件所在目錄
- #include " "編譯器在當前工程文件目錄中搜索頭文件,如果搜索不到,去庫文件所在目錄搜索頭文件。
變量的本質:
1.開辟空間 <p>2.往空間里面放內容 <p> 3.從空間里把內容讀取出來
常量(const關鍵字)
在創建的時候初始化,一經賦值不能在改變
枚舉類型(enum)
語法:enum 枚舉名{枚舉常量1,...} 枚舉變量名
優點:增強代碼的可維護性
自增 和自減運算
-
i++和i--;
先使用當前變量的值,在進行自增自減運算
-
++i和--i
先進行自增自減,再使用變化后的新值
例1
#include <stdio.h>
int main(int argc, const char * argv[])
{
int a = 1, b = 2, c = 3;
if(a++ == 1 && (++b == 3 || c++ == 3))
{
printf("%d %d %d\n", a, b, c);
}
return 0;
}
輸出結果為:233
分析上面的例子,a++ == 1, a先是1==1成立,在自加1, a = 2;++b == 3,b 先自加1 ->b = 3; b == 3 成立,邏輯或后面的不再判斷, 所以c = 3
sizeof是運算符(計算操作數的字節數)
邏輯或(||)和邏輯與(&&)(見例1)
注意:
如果||前面有一個條件為真,后面的都不再做判斷;
如果&&前面有一個為假,后面的條件不再判斷;
* 一元否定運算符( ! )
例2
#include <stdio.h>
int main(int argc, const char * argv[]) {
int a = 5, b = 0;
if(!b)//if(!b)等價于if(b == 0)
{
b = a++;
}
else
{
b = --a;
}
printf("a = %d,b = %d\n", a, b);
}
輸出結果為:a = 6,b = 5
for循環的執行順序
(先執行語句1;然后執行語句2判斷真假,真的話執行循環體里的語句;當{}內語句執行完后執行語句3;再判斷2的真假...知道2不滿足時退出for循環。)
注意:
在使用while{}和do while{}循環時,一定要修改循環變量的值,避免造成死循環。
例3
for循環的執行順序
函數
-
函數的定義
返回值類型 函數名 (形參列表)
-
函數調用的實質
函數相當于一個指針,存儲的是這個函數代碼區的地址編號
- 函數傳參的三種方式(單向傳遞)實參—>形參
傳值
傳指針(地址)
傳引用(C++)
字符串
字符串函數
- int strlen(const char *)計算字符串長度;
- char *strcpy(char *to, const char *from)字符串拷貝函數
- char *strcat(char *, const char *)字符串拼接函數
- int strcmp(const char *str1, const char *str2)字符串比較函數(返回值三種>0,==0,<0)
Snip20160727_3.png
結構體的sizeof的計算
先看結構體中最大字節的類型;然后以最大字節數為一行分配內存;當分配到相應類型時,數字標號(從0開始)一定要能整除當前類型的字節數,不能整除就往后偏移。當最后分配的內存不足一行時,按一行算。
宏定義(#define)
注意點:#define max(A, B) ((A) >(B) ? (A) : (B));
參數可能是一個表達式,所以要加( );
宏定義是在預編譯的時候替換,不需要寫類型。
break continue 和return
-
break
1.用在switch結構,作用是跳出switch結構
2.用在循環語句中,跳出循環,執行循環語句下面的語句。如果是多層循環,只會跳出當層循環。
-
continue
用于循環體內部,作用是結束本次循環,開始新的循環。所以當執行continue語句之后,continue后面的循環語句將不再執行。
-
return
跳出當前的函數,當前函數return后面的語句不會再執行。