c語言——陣列名和&+陣列名的區別
阿新 • • 發佈:2019-01-30
在學習c語言的過程中我們可以發現一個一維陣列的的陣列名往往具有兩層含義:
一. 作為陣列名代表整個陣列
二. 作為指標代表陣列的首元素地址(因此很容易把陣列和指標混為一談)。
當陣列名作為首元素的地址時:
int main() { int arr[5]; int*p = arr; printf("arr=%d\n",arr); printf("arr+1=%d\n",arr+1); printf("arr+2=%d\n",arr+2); printf("p=%d\n",p); printf("p+1=%d\n",p+1); printf("p+2=%d\n",p+2); system("pause"); }
我們可以發現數組名等價於一個指向陣列首地址的指標。
當陣列名代表整個陣列的時候是在以下兩種情況:1.在用sizeof關鍵字求陣列所佔的記憶體大小。2.對陣列名取地址時代表整個陣列的首地址。
#include <stdio.h> #include <stdlib.h> int main() { int arr[5]; int*p = arr; printf("arr=%d\n",arr); printf("arr+1=%d\n",arr+1); printf("&arr=%d\n",&arr); printf("&arr+1%d\n",&arr+1); printf("sizeof(arr)=%d\n",sizeof(arr)); printf("sizeof(&arr)=%d\n",sizeof(&arr)); system("pause"); }
由此可見:當用sizeof求陣列的記憶體長度時,陣列名所代表的是整個陣列,所以長度=5*4=20;
在用sizeof求&arr的記憶體長度時,他所求的空間長度是指向整個陣列的地址的佔用空間長度;
當對陣列名取地址時&arr+1所佔的地址與&arr所佔的地址相差20;而arr+1所佔的地址與arr所佔的地址相差4;