C語言學習筆記 第四天

2021-09-25 15:00:22 字數 1574 閱讀 2999

什麼是指標:指標是一種資料型別(無符號整數,代表了記憶體編號),使用它可以定義指標變數。簡稱指標

指標變數的取值範圍: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 這很重要,要牢記...