C語言(數組啥時候變指針)

今天不討論高大上的東西,真就只說一個小知識點:數組啥時候變指針? 答案是:除了初始化和sizeof之外,一律會變指針。


以一個簡單的int型數組爲例:


int a[5] = {1, 2, 3, 4, 5};


那麼,當我們在程序中使用a時,它的真面目如下:


int a[5] = {1, 2, 3, 4, 5}; // 此時a是數組

sizeof(a); // 此時a是數組


int *p = a+2; // 此時a是指針

function(a, 2); // 此時a是指針

printf("%d\n", a[1]); // 此時a是指針


上面的例子,就是爲了重複說明開始第一段的結論而已,再來一遍:除了初始化和sizeof之外,C語言的任何數組都將一律被視爲指針來處理


當然,要補充的一點是:既然數組大多數情況都會被當做指針,那你好歹要說清楚是什麼指針呀,是的這非常關鍵。這個問題的答案是:數組都將一律被視爲一個指向其首元素的指針,換句話講,大多數情況下,數組都等價於其首元素的地址,因此上面的代碼完全等價於:


int *p = &a[0]+2;

function(&a[0], 2);

printf("%d\n", (&a[0])[1]);


最後,諸位看官請注意,以上結論,針對的是任何數組a,並不僅僅是int型數組,甭管是多維數組、指針數組、函數指針數組、數組指針數組…… 不管它有多複雜,結論都是一樣的。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章