C語言高階 指標的高階 3

2022-09-24 17:09:17 字數 1702 閱讀 9678

目錄

實踐之中不免會碰到陣列和指標作函式引數而如何設計形參的問題。

一維陣列傳參,下列接收方式是否可行呢?

//1.

void test(int arr)

{}//2.

void test(int arr[10])

{}//3.

void test(int* arr)

{}int main()

; test(arr);

return 0;

}1.陣列傳引數組接收,可行但其實都會降級優化成指標,編譯器不會真正建立乙個陣列。

2.由於形引數組形同虛設,所以陣列大小無意義,任意大小或無。(有歧義)

3.陣列傳參本質就是首元素位址,首元素型別為int,所以指標的型別為int*。

所以可以看出和*()是等價的。我願稱之為*和的愛恨情仇!(‐^▽^‐)

//1.

void test2(int* arr[2])

{}//2.

void test2(int** arr)

{}int main()

; test2(arr2);

return 0;

}指標程式設計客棧陣列,每個元素型別為int*,故用二級指標接收陣列名。

一維陣列傳參,陣列和指標接收。

//1.

void test(int arr[3][5])

{}//2.

void test(int arr)

{}//3.

void test(int arr[5])

{}int main() ;

test(arr);

}//4.

void te程式設計客棧st(int* arr)

{}//5.

void test(int* arr[5])

{}//6.

void test(int(*arr)[5])

{}//7.

void test(int** arr)

{}int main() 程式設計客棧;

test(arr);

}4.整型指標接收的應該是整型變數的位址,而二維陣列陣列名為首行的陣列位址。

5.指標陣列和二維陣列無關。

6.二維陣列傳參用首行陣列大小的陣列指標接收。

7.二級指標和二維陣列無關。

int(*)[5]型陣列指標指向元素個數為5的一維陣列。指標+1訪問到下一行,每次跳一行。再解一層引用訪問一行裡每個元素。

反向思考,若函式形參為指標,傳參時實參可以如何設計呢?

void test(int* ptr, int sz)

{}void test(int arr,int sz)

{}int main()

; test(arr);

return 0;

}當二級指標作引數時,形參如何設計呢?

void test(int** pp)

void test(int* arr)

int main()

當形參為二級指標,實參可以傳什麼呢?

void test(int** pp)

int main() ;

//1.

test(&p);

//2.

test(pp);

test(arr);

return 0;

}本文標題: c語言高階:指標的高階(3)

本文位址:

C語言高階 指標的高階 1

目錄 指標定義 指標變數,用於存放位址。位址唯一對應一塊記憶體空間。指標大小 固定32位平台下佔4個位元組,64位8個位元組。指標型別 型別決定指標整數的步長及指標解引用時訪問的大小。指標運算 指標解引用,指標整數,指標 指標,指標關係運算。本章節在此基礎上,對c語言階段指標進行更深層次的研究。字元...

C語言 高階指標

import import myfunction.h 巨集後面不要加分號 define kimagewidth 200 define kimageheight 200 有引數的巨集 define kmax a,b a b a b 加上括號 define kmul a,b a b define and...

C語言高階指標 1

c語言的指標是c語言這門語言的精華所在,當然也是讓很多人詬病的地方。指標是什麼?有這麼一句話 對於錘子來說,一切都是釘子。那麼換句話講指標,即 對於指標來說,一切都是位址 記憶體是由乙個個記憶體單元構成的,每個記憶體單元都有自己的位址。而指標就是用來存放這些位址的。凡是可以用指標來儲存的變數,在指標...