什麼是指標:指標是一種資料型別(無符號整數,代表了記憶體編號),使用它可以定義指標變數。簡稱指標
指標變數的取值範圍:0-4g(32個1)。
什麼情況下使用指標:1、函式之間共享變數(全域性變數會有命名衝突,不會被釋放,浪費記憶體)。
2、優化傳遞效率
因為c語言採用的是值傳遞(記憶體拷貝),會隨著變數位元組數的增加而降低執行效率,而傳遞變數的位址,永遠只拷貝4||8位元組
但使用指標,變數的值就可能會被修改,可以配合const進行保護。
void func(const int * p)
3、配合堆記憶體:堆記憶體無法取名字
如何使用指標:
定義:型別 *變數名_p;
1、與普通變數一樣,預設值不確定,為了安全一般初始化為null
2、乙個*只能定義乙個指標變數。
int *p1,*p2;
3、指標變數與普通變數的用法不同,為了避免混用,一般從名字上加以區分。
4、指標變數的型別決定了解引用時訪問的位元組數。
賦值:變數名_p=位址
1、注意位址的型別
2、void*可以與任意型別的指標進行自動轉換(c++中不可以)。
3、要保障位址與物理記憶體有對應關係(對映過),否則會有段錯誤。
解引用:*p;
根據指標變數中儲存的記憶體編號,而訪問記憶體中的資料。
這個過程可能會有段錯誤,但這是由於賦值了有問題的位址。
使用指標要注意的問題:
1、野指標
指向的目標不確定,解引用時不一定會出錯。但未知的危險才是最可怕的
而且野指標一旦產生就無法分辨出來,而預防的方法就是不製造野指標。
(1)、定義指標時一定要初始化。
(2)、指向的目標被釋放後,一定要及時置空。
(3)、不要指向隨時可能被釋放的目標。
2、空指標:指標變數的值等於null,對這個位址解引用訪問時一定會產生段錯誤。
因為它儲存的是作業系統重啟時所需要的資料。
而預防的方法就是解引用前進行判斷(指的是來歷不明的指標) if(null == p)。
指標的運算:
指標+或/或-整數=指標+或/或-(寬度)*整數
指標-指標 = (指標-指標)/寬度
指標與陣列名:
1、陣列名就是乙個特殊的位址。它就代表陣列第乙個元素的首位址。但是也能當指標使用。
arr[i]<=>*(位址+i);
因此指標也能使用[ ]運算子。
2、指標與目標記憶體是指向關係,而陣列名是對應關係
3、陣列當函式的引數就蛻變成了指標變數,長度丟失,安全性也下降。
void func(int* const arr,size_t len);
指標與const的配合使用:
const int* p;
int const * p;
int * const p;
const int * const;
int const * const p;
指標的高階應用:
指標陣列:把無序的離散的資料,歸納到一起。
陣列指標:專門指向陣列的指標
二級指標:指向指標的指標
函式指標:指向函式的指標
c語言學習第四天筆記
函式 1 函式定義時給出的引數稱為形式引數,簡稱形參 函式呼叫時給出的引數 傳遞的資料 稱為實際引數,簡稱實參。函式呼叫時,將實參的值傳遞給形參,相當於一次賦值操作。2 在函式定義中出現的引數可以看做是乙個佔位符,它沒有資料,只能等到函式被呼叫時接收傳遞進來的資料,所以稱為形式引數,簡稱形參。函式被...
C語言學習第四天
1.繪製余弦曲線 在螢幕上用 顯示0 350 的余弦函式cos x 曲找。問題分析與演算法設計。如果在程式中使用陣列,這個問題十分簡單。但若規定不能使用陣列,問題就變得不容易了。關鍵在於余弦曲線在00 360 的區間內。行中要顯示兩個點 而對 般 的顯示器來說,只能按行輸出,即 輸出第 行資訊後,只...
C語言第四天
今天我們學習了陣列,包括陣列的定義,陣列的排序,氣泡排序法。int array 10 printf 改變前 for int i 0 i 10 i printf n for int i 0 i 10 1 i printf 改變後 for int i 0 i 10 i printf n 這很重要,要牢記...