《c語言深度剖析》讀書筆記(四)指標和陣列

2021-10-06 21:02:08 字數 1479 閱讀 7808

本文是自己讀書的時候一些關於該書的重點及感悟

目錄

1、指標

2、陣列

3、指標和陣列的關係

4、指標陣列和陣列指標

5、多維資料和多維指標

6、陣列引數和指標引數

7、函式指標

(1)指標,即存放記憶體位址的變數,長度固定,32位系統中長度為4,說白了就是定址位數。當然,指標是變數,那麼免不了被訪問,當然就會有存放此指標的位址,用&p獲取;

(1)int a[5]; a 作為右值時其意義與&a[0]是一樣,代表的是陣列首元素的首位址,而不是陣列的首位址。a不能作為左值

(1)指標和陣列之間沒有任何關係!

指標就是指標,指標變數在 32 位系統下,永遠佔 4 個 byte,其值為某乙個記憶體的位址。

指標可以指向任何地方,但是不是任何地方你都能通過這個指標變數訪問到。

陣列就是陣列,其大小與元素的型別和個數有關。定義陣列時必須指定其元素的型別

和個數。陣列可以存任何型別的資料,但不能存函式。

(2)定義乙個陣列int a[5]=。 a,&a 的值是一樣的,但意思不一樣,a 是陣列首元素的首位址,也就是 a[0]的首位址,&a 是陣列的首位址,a+1 是陣列下一元素的首位址,即 a[1]的首位址,&a+1 是下乙個陣列的首位址。

(3)定義和宣告之間的區別,定義分配的記憶體,而宣告沒有。定義只能出現一次,而宣告可以出現多次。

(4)extern char a與 extern char a[100]等價的原因。因為這只是宣告,不分配空間,所以編譯器無需知道這個陣列有多少個元素。

(1)指標陣列:首先它是乙個陣列,陣列的元素都是指標,陣列佔多少個位元組由陣列本身

決定。它是「儲存指標的陣列」的簡稱。

陣列指標:首先它是乙個指標,它指向乙個陣列。在 32 位系統下永遠是佔 4 個位元組,

至於它指向的陣列佔多少位元組,不知道。它是「指向陣列的指標」的簡稱。

a),int *p1[10]; 指標陣列

b),int (*p2)[10]; 陣列指標

(1)一級指標儲存的是資料的位址,二級指標儲存的是一級指標的位址。

(1)c 語言中,當一維陣列作為函式引數的時候,編譯器總是把它解析成乙個指向其首元

素首位址的指標。

(2)函式本身是沒有型別的,只有函式的返回值才有型別。

(3)main 函式內的變數不是全域性變數,而是區域性變數,只不過它的生命週期和全域性變數一樣長而已。全域性變數一定是定義在函式外部的。

(4)c 語言中,當一維陣列作為函式引數的時候,編譯器總是把它解析成乙個指向其首元素首位址的指標。

(5)c 語言中,當一維陣列作為函式引數的時候,編譯器總是把它解析成乙個指向其首元素首位址的指標。這條規則並不是遞迴的,也就是說只有一維陣列才是如此,當陣列超過一維時,將第一維改寫為指向陣列首元素首位址的指標之後,後面的維再也不可改寫。

(1)使用函式指標的好處在於,可以將實現同一功能的多個模組統一起來標識,這樣一來更容易後期的維護,系統結構更加清晰。

C語言深度解剖 讀書筆記 8 指標和陣列

4.3 指標和陣列之間的恩恩怨怨 指標與陣列的區別 陣列是陣列,指標是指標,根本就是兩個完全不一樣的東西。當然要是在巨集觀的記憶體角度看,那一段相同型別的連續空間,可以說的上是陣列。但是你可以嘗試下,定義乙個指標,在其他地方把他宣告成陣列,看看編譯器會不會把兩者混為一談,反過來也不會。但是為什麼我們...

《c語言深度剖析》讀書筆記(二)符號

本文是自己讀書的時候一些關於該書的重點及感悟 目錄 1 注釋符號 2 接續符和轉義符 3 單引號和雙引號 4 邏輯運算子 5 位運算子 6 花括號 7 操作符 8 c語言除法 9 符號優先順序 1 c 語言裡可以有兩種注釋方式 和 編譯器在編譯程式時的確會將注釋剔除,但不是簡單的剔除,而是用空格代替...

《c語言深度剖析》讀書筆記(六)函式

本文是自己讀書的時候一些關於該書的重點及感悟 目錄 1 函式的好處 2 編碼風格 3 函式設計的一般原則和技巧 4 遞迴 1 降低複雜性 2 避免 重複 3 限制改動帶來的影響 4 隱含順序 5 改進效能 6 進行集中控制 7 隱含資料結構 8 隱含指標操作 9 隱藏全域性變數 1 每乙個函式都必須...