1.在最新的 c99 標準中,只有以下兩種定義方式是正確的:
intmain( void )和int main( int argc, char *argv ).如果不需要從命令列中獲取引數,請用int main(void) ;否則請用int main( int argc, char*argv ) 。如果 main 函式的最後沒有寫return 語句的話,c99 規定編譯器要自動在生成的目標檔案中(如exe檔案)加入return 0; ,表示程式正常退出。不過,建議最好在main函式的最後加上return 語句,雖然沒有這個必要,但這是乙個好的習慣。c/c++ 中從來沒有定義過void main( ) 。
因此為了使程式有很好的移植性,強烈建議使用:
intmain()
返回值的作用: main函式的返回值用於說明程式的退出狀態。如果返回0,則代表程式正常退出;返回其它數字的含義則由系統決定。通常,返回非零代表程式異常退出。
intmain(void)指的是此函式的引數為空,不能傳入引數,如果你傳入引數,就會出錯。但必須要有返回值,如在程式的最後一行寫上return 0;
intmain()表示可以傳入引數,程式不需要返回值,就是不要在程式尾部寫上return 值。
在c++中int main()和intmain(void)是等效的,但在c中讓括號空著代表編譯器對是否接受引數保持沉默。在c語言中main()省略返回型別也就相當說明返回型別為int型,不過這種用法在c++中逐漸被淘汰。雖然void main()在很多系統都適用,但他畢竟不是標準的,所以應該避免這種用法,應該使用這種int main(void)的寫法比較妥當。
2.switch語句完全可以用if語句代替,每乙個case塊的最後一句語句要有break語句,否則將執行到下乙個case塊中去。還需要注意的是,switch語句只適用於基本型別的變數作條件(包括擴充基本型別)。default塊可以省略,但建議您不要省略,即使不用也加上。
3.else塊只能出現在if語法的最後,且最多只能出現1次。else if塊能出現若干次,但只能在if塊的後面,不能在else塊的前面。當各塊裡面的語句只有一句時,括號{}可以省略。不建議省略,因為省略後下面的語句讓人容易糊塗。
4.getchar()從控制台讀取乙個字元,並回顯。getchar函式的返回值是使用者輸入字元的ascii碼,當你按下乙個鍵時,getchar會得到它的ascii碼,如果小於32就會是乙個控制字元。控制字元不是無法直接從鍵盤輸入,而是無法在顯示器上顯示。
5.比較運算子只有6個,即:等於(==)、不等於(!=)、大於(>)、小於(<)、大於等於(>=)、小於等於(<=)。比較運算子也叫關係運算子。
邏輯運算子只有3個,即:與and(&&)、或or(||)、非not(!)。
位運算子只有6個,即:與and(&)、或or(|)、非not(~)、異或xor(^)、左移shiftleft(<<)、右移shiftright(>>)。
6.逗號(,)運算子,將幾個內容合成乙個運算,且不改變分開執行的結果。for語句中常用。i++;先賦值後加。++i先加後賦值
7.do...while語句是先進入迴圈再判斷條件為「假」來決定是否終止迴圈。
8.a若表示陣列名,陣列名單獨使用時則a等價於陣列首個元素的位址,即a[0]的位址(其實是有問題的)。陣列在記憶體中是以線性的方式連續儲存的,就是a[0]、a[1]、a[2]···這樣連續存放。其中乙個元素的位址可由首位址加上偏移量計算出,即a[i]的位址 = a[0]的位址 +i * 陣列元素型別所佔的位元組數。指標的加減是和指標型別相關的,比如char用1byte,int用4byte。
9.%c 乙個字元 %p 指標 %s 字串 %d 有符號十進位制整數
%md 以寬度m輸出整型數,不足m時,左補空格
%-md 負號表示左對齊,並以寬度m輸出整型數,不足m時,在右邊補空格對齊
%0md 以寬度m輸出整型數,不足m時,左補零
%m.nf 以寬度m輸出實型小數,小數字為n位
當指定場寬小於資料的實際寬度時,對整數,按該數的實際場寬輸出,對浮點數,相應小數字的數四捨五入。
10.字元陣列和字串的重定義
字元陣列,完整地說叫字元型別的陣列。字元陣列不一定是字串。
字串是最後乙個字元為null字元的字元陣列。字串一定是字元陣列。
字元陣列的長度是固定的,其中的任何乙個字元都可以為null字元。
字串只能以null結尾,其後的字元便不屬於該字串。
strlen()等字串函式對字串完全適用,對不是字串的字元陣列不適用。
sizeof()運算子求的是字元陣列的長度,而不是字串長度。
strlen()函式求的是字串長度,而不是字元陣列。它不適用於字串以外的型別。
11.char sarr = "quanxue";
也可以寫成charsarr[8] = "quanxue";(注意:是8而不是7)
12.getchar()
和putchar()函式是單個字元的輸入輸出,gets()和puts()是字串的輸入輸出,也是標準函式,在stdio.h中被定義。
13.&
符號是取變數的位址,符號是取位址的內容(即:值)。兩個操作正好相反。例如:「&i」就是取變數i的位址,「(&i)」就是取「&i」這個位址的值,其實就是變數i。即然如此,為什麼還要定義指標呢?原來,用『&』所取到的位址,自身只能用而不能修改。因此,直接把『&』取到的位址放到指標變數中去,既然指標變數也是變數,這個變數就可以任意存放其它位址。
14. int i = 129;
intnum = ;
int*pt1 = 125; //
錯誤1: 125作為位址賦給pt1, 這段記憶體是os用的
int*pt2 = i ; //
錯誤2: 129作為位址賦給pt2, 這段記憶體是os用的
int*pt3 = &i; //
正確: 變數i的位址賦給pt3, 因為i是基本型別,所以要加&符號
int*pt4 = num; //
正確: 陣列num的位址賦給pt4,因為num是陣列,變數名就代表位址
char*pt5 ;
*pt5 ="abcde"; //
錯誤3: "abcde"是字串,也是陣列,此處更是常量
pt5 ="abcde"; //
正確: 賦值時賦的是位址,因此只能賦給指標變數pt5
int*pt6 ;
pt6 =i; //
錯誤4: 129作為位址賦給pt6, 這段記憶體是os用的
*pt6 =i; //
錯誤5: 129賦給指標pt6,但pt6尚未分配位址,沒有空間存放i的值
15.未賦值的指標變數是不能被使用的,其位址指向不能使用的空間。建議定義時如果暫不使用,先賦null。為乙個指標申請空間時,一定義要判斷其是否為空,因為分配記憶體失敗時返回null。不僅如此,甚至在使用指標時都應該判斷一下是否為空。
if(!pchar)
16.指標變數加n或減n,並不是位址加n或減n,而是當前所指的位址向後或向前跳n次所指的位址,指標前進或後退當前指標指向的變數型別的長度×n。例如當int型指標變數減1或加1時,所指的位址並不減1或加1,而是加減4,因為int是4個位元組。給指向陣列的某個元素的指標加n後,指標會指向n個之後的元素。
17.char
型的指標陣列相當於二維字元陣列,並不等於說指標陣列可以直接轉化為二為字元陣列,相反字元陣列可以直接轉化為指標陣列。因為二維字元陣列的位址是連續的,而指標陣列所指的元素不一定連續(如下的m1、m2、m3的位址可以不連續,長度也可以不一樣)。
18.指標的長度:c語言沒有提供陣列長度的函式,但可以用sizeof()運算子先求陣列的總長度,再求出陣列型別的長度,二者相除便得到陣列的長度。sizeof()對指標變數求值時,結果總是4,這是因為指標變數的內容是位址,位址總是4個位元組來表示。
在用指標作引數時,一般總是同時多定義乙個引數,來存放其長度。也就是指標和其長度同時傳遞過去。另外,陣列長度如果事先知道,一般定義為常量。
C語言入門學習(一)
1 資料型別 1 基本型別 它們是算術型別,包括兩種型別 整數型別和浮點型別。2 列舉型別 它們也是算術型別,被用來定義在程式中只能賦予其一定的離散整數值的變數。3 void 型別 型別說明符 void 表明沒有可用的值。4 派生型別 它們包括 指標型別 陣列型別 結構型別 共用體型別和函式型別。2...
C語言入門學習
計算機能夠識別和接受的語言。要使計算機按自己的意圖工作,必須使用計算機所能接受 理解和執行的指令指揮計算機工作。最早問世,用二進位制 構成指令。如 100000 110000 用機器語言程式設計的缺點 繁瑣 不直觀 不易除錯。如計算y 2x2 3x 1需要七八條指令。移植性差。依賴於計算機。用符號構...
C語言入門學習
資料型別 取值範圍 補碼字串 優勢 基本型別 整數型別 浮點數型別 字元型別 列舉型別 指標型別 構造型別 陣列型別 結構型別 聯合型別 空型別 位元位cpu能讀懂的最小單位 位元位,bit,b 位元組記憶體機構的最小定址單位 位元組,byte,b 1byte 8bit 符號位存放signed型別的...