%d 按照十進制整形數列印;
%o 按照八進制整形數列印;
%x 按照十六進制整形數列印;
%c 表示字元
%s 表示字元串
%% 表示%本身列印;
%ld long型輸出
”幻數“: #define 名字 替換文本
#define NUM 100
++i, 比i++更精煉:
兩者的差別:++i,不會産生一個中間寄存器變量來儲存變量;
i++,産生一個寄存器變量來儲存i在把i+1指派給i;
在C語言中,所有參數都是“通過值”傳遞的,也就是說,傳遞給被調用函數的參數值存放在臨時變量中,而不是存放在原來的變量中;(是一個簡單的copy過程);
被調用函數不能直接修改主調函數中變量的值,而隻能修改其私有的臨時副本的值;
關鍵點:指針
指針隻能指向某種特定類型的對象,也就是說,每個指針都必須指向某種特定的資料類型。
(一個例外:指向void類型的指針可以存放指向任何類型的指針,但它不能間接引用其自身)
字元串常量最常見的用法是作為函數參數:
printf("hello, world\n");
當類似于這樣的一個字元串出現在程式中,實際上是通過 字元串指針通路該字元串的;在上述語句中,printf函數接受的是一個指向字元數組第一個字元的指針。也就是說,字元串常量可通過一個指向其第一個元素的指針通路;
C語言沒有提供将整個字元串作為一個整體進行處理的運算符;
下面兩個定義之間有很大的差别:
char amesage[ ] = " now is the time "; //字元串儲存在棧區;,函數退出的時候就釋放掉了;在函數調用時候要“警惕”;
char *pmessage = "now is the time"; //字元串儲存在靜态資料區;在整個應用程式退出時釋放;pmessage指向的是一個常量;
上述聲明中,amessage是一個僅僅足以存放初始化字元串以及空字元'\0'的一維數組;數組中的單個字元可以進行修改;
但amessage始終指向同一個存儲位置,另一方面,pmessage 是一個指針,其初值指向一個字元串常量,之後它可以被修改以指向
其它位址。但如果試圖修改字元串的内容,結果是沒有定義的;

amessage[2] = 'G'; //ok
//pmessage[3] = 'G'; //error
printf("%c\n", pmessage[3]);