程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 數組名是指針麼?

數組名是指針麼?

編輯:C++入門知識

數組名是指針麼?如果不是,數組名到底是怎樣的一種結構?求解釋。

我敘述一下我所知道的數組名與指針的區別。

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小加
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved