C語言學習2 指標與陣列的細節

2021-10-02 21:08:50 字數 774 閱讀 1661

1、運算子&:

①作用為取乙個變數的位址

②輸出位址時格式要使用%p

③強制將位址轉為int時輸出可能失真,取決於編譯時32/64位架構

④&右邊必須是乙個單純的變數,不能是a++之類

2、陣列:

①&a a &a[0] 等價,都為陣列(第乙個單元)的位址。

②傳入函式的陣列是指標,大小為乙個位址,指向那個陣列。

③陣列變數本身表達位址,int*p = a;

④ *a表示a的第乙個單元

⑤陣列變數是const型別的指標,故不能使用b = a賦值:int b -->int *const b

⑥int sum(const int a )可以保護陣列不被破壞。

3、指標:

①指標是儲存位址的變數,必須先初始化再使用:int *p=&i

②int與 * 靠近與否僅將後邊相鄰的變數定義為指標型別。

③函式引數為指標時,呼叫時使用 f (&i) 的形式,且在函式內部可以改變外部變數的值,適用於交換、需要輸出多值、值通過引數指標返回狀態通過return返回。

④p[0]=*p

⑤int *const q = &i 表示q的值不能改變,即q指向i的事實不能改變

而 const int * p 或者 int const * p表示不能通過這個指標去修改那個變數。

void f (const int * x)常用於引數型別比位址大,且能避免函式對變數進行修改(結構)

⑥兩個指標相減後的結果為兩位址之差除以sizeof

⑦常用 *p++做遍歷

C語言學習筆記(2) 指標(下)

它的第乙個引數是置空記憶體的首位址,第二個引數寫0,第三個是置空的大小,單位位元組 sizeof a memcpy 實現第乙個引數是目標位址,第二個是源位址,第三個是copy多少內容,單位位元組 注意使用過程中假如待拷貝的陣列和目標陣列型別不同,short int 和int等。會輸出如下奇怪 的結果...

C語言學習(三) 指標

指標的定義int p char p float p指標變數所佔記憶體的大小 跟前面定義的型別無關 而跟系統有關 16bits作業系統 2b 32bits作業系統 4b 64bits作業系統 8b 指標指向乙個值所在的第乙個位元組 通常乙個位址存放乙個位元組 const修飾指標 指標指向乙個字串時 如...

C語言學習4 指標

int a 10 int p a 一級指標 int s p 二級指標 int p 10 指向陣列的指標 int s 10 指標指向放指標的陣列 這個陣列有十個空間 int p 10 開闢10個空間 每個空間放指標 例如 int br 10 int s 10 br int ar 10 int p 10...