數組名是指針麼?如果不是,數組名到底是怎樣的一種結構?求解釋。
我敘述一下我所知道的數組名與指針的區別。
1、地址相同,大小不同
看下面代碼:
1 int arr[10];
2 int* p=arr;
3 cout<<arr<<endl;
4 cout<<p<<endl;
5 cout<<sizeof(arr)<<endl;//結果為40
6 cout<<sizeof(p)<<endl;//結果為4
arr為數組名,p為指針。
第3、4行輸出的值一樣,也就是說arr和p都是數組的首地址。第5、6行的結果不一樣,arr的大小是整個數組的大小,而p的大小是指針的大小。
為什麼arr的大小會是40?
2、都可以用指針作為形參
指針的形參當然是指針。數組的形參可以是數組,也可以是指針。下面代碼印證了數組的形參可以是指針。
1 void fun(int* p)
2 {
3 cout<<p[0]<<endl;
4 }
5
6
7 int main()
8 {
9 int arr[10]={0};
10 int* p=arr;
11 fun(arr);
12
13 return 0;
14 }
這點可以看出,數組名完全可以當成指針來用。
3、指針可以自加,數組名不可以
1 int arr[10]={0};
2 int* p=arr;
3 arr++;
4 p++;
當數組名自加時程序編譯就會出錯,從這點應該可以看出,數組名是一個常量(const 修飾)。
www.2cto.com
4、作為參數的數組名的大小和指針的大小相同
1 void fun(int arr[])
2 {
3 cout<<sizeof(arr)<<endl;//結果為4
4 arr++;//編譯成功
5 }
6
arr的大小變為4、arr++成功編譯可以確定,作為參數的arr已經完全變成了一個指針。
以上就是我所知道的指針與數組名的區別,如果還有別的區別請留言告訴我,如果誰知道數組名到底是一種什麼樣的結構,也請留言告知,謝謝哈。
摘自 C小加