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 关注
- 3848 浏览
添加回答
举报