1.強制類型轉換
對於printf()任何小於int類型的數字都會被轉爲int類型的數字輸出,float會被轉爲double類型輸出。
對於scanf()則不會這樣。
2.優先級
!>&&>||
3.函數的聲明與定義
函數在使用之前必須先聲明再使用。
4.指針學習:
(1)指針應用場景a:通過指針來實現交換兩個數的值
(2)指針應用場景b:
函數返回多個值,某些值就只能通過指針返回 ;
傳⼊的參數實際上是需要保存帶回的結果的變量
(3)
int* p,q;
int *p,q;
這兩種方式都只是聲明瞭p爲指針型變量,p只是普通型變量。
(4)指針最常⻅的錯誤:
定義了指針變量,還沒有指向任何變量,就開始使⽤ 指針
5.指針與數組
(1)函數參數表中的數組實際上是指針
(2)數組變量是特殊的指針
• 數組變量本⾝表達地址,所以
• int a[10]; int*p=a; // ⽆需⽤&取地址
• 但是數組的單元表達的是變量,需要⽤&取地址
• a == &a[0]
• []運算符可以對數組做,也可以對指針做:
• p[0] a[0]
• *運算符可以對指針做,也可以對數組做:
• *a = 25; • 數組變量是const的指針,所以不能被賦值
• int a[] int * const a=…
區分下面三種表達方式:
int i;
const int* p1 = &i;
int const* p2 = &i;
int *const p3 = &i;
判斷哪個被const了的標誌是const在*的前⾯還是後⾯。
第一二種屬同種情況,表⽰不能通過這個指針去修改那個變量(並不 能使得那個變量成爲const)
第三種情況表示⼀旦得到了某個變量的地址,不能再指向 其他變量
6.關於指針加1的問題
指針加1加的數量是該指針類型的大小,相當於數組的下一位。
7.指針的類型
• ⽆論指向什麼類型,所有的指針的⼤⼩都 是⼀樣的,因爲都是地址
• 但是指向不同類型的指針是不能直接互相 賦值的
8.C99之後可以用變量來聲明數組的大小,C99之前則用malloc()函數動態申請內存空間
動態申請內存空間需要記住三點
9. 字符串
hello會被編譯器變成⼀個字符數組放在某處,這 個數組的⻓度是6,結尾還有表⽰結束的0
很多人說char*是字符串,char*不一定是字符串
• 字符串可以表達爲char*的形式
• char*不⼀定是字符串
• 本意是指向字符的指針,可能指向的是字符 的數組(就像int*⼀樣)
• 只有它所指的字符數組有結尾的0,才能說它 所指的是字符串
scanf輸入字符串: