为了账号安全,请及时绑定邮箱和手机立即绑定

数组变量是const的指针怎么理解呢?

数组变量是const的指针怎么理解呢?

C
Single丶love 2016-08-14 23:32:00
但我们不是依然可以在初始化之后改变数组单元的值吗,就像a[0]=10,但const不是不允许改变吗?这个数组变量是const的指针怎么理解呢?求详细一点啊,万分感谢!怎么利用这个解释 int b[]=a ; 是错误的呢?
查看完整描述

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也是一个常量。常量 = 常量?这显然是错的。这就解释了第二个问题。

       至于为什么把数组名设计为一个常量,希望有大神可以解惑^_^

查看完整回答
2 反对 回复 2017-08-23
?
hust_web

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};   没问题

    至于为什么,还不知道,希望大神解答。


查看完整回答
反对 回复 2016-08-21
?
凌小天3635910

TA贡献17条经验 获得超13个赞

数组名绝对不等于指针,而且不是指针。
  数组名是指针常量,地址是绝对的,score指向受保护,但首地址的内容可以改变,所以数组首地址应该是指针常量int *const score。
  指针是一个变量,变量的值是另外一个变量的地址。那么,既然指针是变量,那么指针必然有自己的存储空间,只不过是该存储空间内的值是一个地址值,而不是别的内容。


摘自百度知道。

查看完整回答
反对 回复 2016-08-15
?
繁华如梦倾城殇

TA贡献23条经验 获得超6个赞


数组变量是一个指针,它指向的内容是const int 类型。数组变量本身不用初始化它可以指向任何标示符,但它指向的内容是不能被改变的

查看完整回答
反对 回复 2016-08-15
?
木柘

TA贡献143条经验 获得超94个赞

数组指针是地址,你所谓的改变是赋值不改变地址。

查看完整回答
反对 回复 2016-08-15
  • 5 回答
  • 0 关注
  • 3766 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信