目錄
實踐之中不免會碰到陣列和指標作函式引數而如何設計形參的問題。
一維陣列傳參,下列接收方式是否可行呢?
//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語言這門語言的精華所在,當然也是讓很多人詬病的地方。指標是什麼?有這麼一句話 對於錘子來說,一切都是釘子。那麼換句話講指標,即 對於指標來說,一切都是位址 記憶體是由乙個個記憶體單元構成的,每個記憶體單元都有自己的位址。而指標就是用來存放這些位址的。凡是可以用指標來儲存的變數,在指標...