陣列名和陣列名 二維陣列的傳參

2021-09-29 13:30:26 字數 1081 閱讀 5358

首先我們看下面**:

#include

intmain()

;printf

("%p\n"

, arr)

;printf

("%p\n"

,&arr)

;printf

("arr+1 = %p\n"

, arr+1)

;printf

("&arr+1= %p\n"

,&arr+1)

;return0;

}

根據上面的**我們發現,其實&arr和arr,雖然值是一樣的,但是意義應該不一樣的。

arr表示陣列首元素的位址,而 &arr 表示的是陣列的位址,而不是陣列首元素的位址。

arr+1:就是將arr隱式轉化為乙個(int*)型的指標, +1就是加該指標所指向的型別的大小(int大小為4個位元組)所以加4

&arr+1:就是將&arr隱式轉化為乙個int(*)型的陣列指標, +1就是加該指標所指向的型別的大小(int[10]大小為40個位元組)所以加40

首先我們來看下邊**

int

main()

;print_arr1

(arr,3,

5);print_arr2

(arr,3,

5);return0;

}void

print_arr2

(int

(*arr)[5

],int row,

int col)

void

print_arr2

(int arr[

5],int row,

int col)

arr是陣列首元素的位址,但是首元素是乙個陣列 int[5], 所以 arr的型別為 int ()[5] //陣列指標變數

所以傳參時我們可以用 int()[5]型別陣列指標變數來接收,但這不是常見的寫法,常見的寫法是

int arr[ ][5] 它會轉換成 int(*)[5],所以陣列arr[ ][5],第乙個[ ]裡邊寫幾或省略都可以,但是第二個[ ]中必須寫5。

陣列名和陣列名取位址

在c中,在幾乎所有使用陣列的表示式中,陣列名的值是個指標常量 也就是陣列第乙個元素的位址。它的型別取決於陣列元素的型別 如果它們是int型別,那麼陣列名的型別就是 指向int的常量指標 在以下兩種場合下,陣列名並不是用指標常量來表示,就是當陣列名作為sizeof操作符和單目操作符 的運算元時。siz...

陣列名和陣列名取位址

1 int a 10 2 int p a 3 int q 10 a 第二個為指向陣列的指標.a只是a 0 的位址,a 1就是a 1 的位址了,a是整個a 10 的首位址,是以整個陣列為角度來看,雖然它與a 0 的值相同,但是 a 1就已經增加了10個int型別的位元組的長度了.1 include 2...

陣列名和陣列名的取址

關於陣列名和指標的區別 推薦看這兩篇文章 示例 char a 3 輸出10進製位址 輸出 a 為 2686777 a 為 2686777 a是陣列名,編譯器處理時相當於陣列首元素的位址 a是乙個指向陣列的指標,值為陣列的位址,等於陣列首元素的位址 輸出 a 為 1 a 為 1 a 為 2686777...