陣列名原來這麼有意思!! 陣列名的奧秘

2021-06-16 06:53:35 字數 1198 閱讀 1626

一維陣列:

**:#include

int main(int argc,char **argv)

你猜猜,前三個輸出的結果是什麼?你考慮考慮,再考慮考慮最後三個輸出的結果。

你上機操作一下你就知道結果了。

前三個的結果一樣,都是同乙個位址值

後三個 a+1與&a[0]+1一樣,最後乙個&a+1不一樣。

如果你明白為什麼是這個結果,那麼你就不用接著往下看了,如果你猶豫的話,那我給你解釋解釋。

&a:代表a這整個陣列的首位址,a整個陣列占有20(  等於5*sizeof(int) )個位元組的這片記憶體區域的首位址

&a[0]:等於a

&a[0]+1:與a+1同乙個意思的不同表達

二維陣列

**:#include

void arr(int array[5])

int main(int argc, char **argv)

;array[1][1] = 100;

array[1][0] = 50;

printf("array=%p\n",array);

printf("array[0]=%p\n",array[0]);

printf("&array[0][0]=%p\n",&array[0][0]);

printf("array+1=%p\n",array+1);

printf("array[1]=%p\n",array[1]);

printf("*(*(array+1)+1)%d\n",*(*(array+1)+1));

printf("array[1][1]=%d\n",array[1][1]);

arr(array);

return 0;}

二維陣列的函式傳參時候,必須傳遞陣列的列數,因為,二維陣列當引數傳遞時,傳遞的是二維陣列的首行位址即array[0]的位址。 根據結果你就可以去判斷哪些是等價的了。

array=array[0]=&array[0][0]

array+1=array[1]=*(array+1)

array[1][1]=*(*(array+1)+1)

array[1][0]=*(*(array+1))

多維陣列的儲存:

sizeof 陣列名 及strlen(陣列名)

程式的輸出結果為 1 100 2 4 3 1 相當於a 100 這個數所佔的位元組大小,也就是乙個char位元組占得大小 當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。不論陣列a的容量是多少,sizeof a 始終等於sizeof char func char p int main ...

陣列名和陣列名取位址

在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...