5 回答
TA貢獻11條經驗 獲得超4個贊
? ? ? ? 首先先對比一下int * const arr 和 int const * arr的區別吧。前者的const作用在arr上,arr的值不可以變,比如arr++就是錯誤的。后者作用在* arr上,即不能通過arr去改變它所指向的地址里存儲的值,即*arr = 10是錯誤的。這就解釋了第一個問題。
? ? ? ? 其次,int a[]的方式聲明了一個本地變量,一經聲明便分配了一段固定的連續的內存單元。a是這段存儲單元的首地址,如同上邊說的一樣a是一個常量。int b[],b也是一個常量。常量 = 常量?這顯然是錯的。這就解釋了第二個問題。
? ? ? ?至于為什么把數組名設計為一個常量,希望有大神可以解惑^_^
TA貢獻4條經驗 獲得超0個贊
1.首先一個數組,比如a[10] ,它的首地址a和指針不一樣,你不能再對a賦值,比如你寫的int b[10]; b=a;是錯誤的,
2.其次const修飾數組,比如const int a[10]= {1}; 說明里面的數據是常量,你再寫a[0] = 1之類出錯。
3. 還有const int a[10] = {1}中的a[0] = 1沒問題,但是a[0] 和const int b = 1 的b也有區別,比如:
????const int a[10] = {1}; int arr[ a[0] ] = {0}; 會出錯
????const int b=1; ? int arr[b] = {1} = {0}; ? 沒問題
????至于為什么,還不知道,希望大神解答。
TA貢獻17條經驗 獲得超13個贊
數組名絕對不等于指針,而且不是指針。
數組名是指針常量,地址是絕對的,score指向受保護,但首地址的內容可以改變,所以數組首地址應該是指針常量int *const score。
指針是一個變量,變量的值是另外一個變量的地址。那么,既然指針是變量,那么指針必然有自己的存儲空間,只不過是該存儲空間內的值是一個地址值,而不是別的內容。
摘自百度知道。
- 5 回答
- 0 關注
- 4023 瀏覽
添加回答
舉報
