首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

数组名是指针恒量,为什么可以赋值给非const指针

2013-08-27 
数组名是指针常量,为什么可以赋值给非const指针数值名是指针常量,为什么可以int a[10]{0}int *pa或者

数组名是指针常量,为什么可以赋值给非const指针
数值名是指针常量,为什么可以

int a[10]={0};
int *p=a;

或者是作为函数参数传递给指针。

不是说const不可以传递给非const吗 指针 数组 c 传递
[解决办法]

引用:
数值名是指针常量,为什么可以

int a[10]={0};
int *p=a;

或者是作为函数参数传递给指针。

不是说const不可以传递给非const吗


1. 数值名是指针常量

数组就是数组,数组不是指针。 但是数组可以转换为指针(属于标准转换之一)

2. 不是说const不可以传递给非const吗
乱说。 int a = 6; //6是也是常量
这里只是拷贝初始化。
[解决办法]
在这里a代表的是一个const指针,你把a赋值给p后,你对p的任何操作是改变不了a的值的(地址),你最多只能改变a的地址所指向的值

你说的那一种情况可能是:
int a[10];
const int* b = a;
int* c = b;
这里 b代表是一个指针 他所指向的值是不能改变的,然后这里把他赋值给c就会出现错误
[解决办法]



int a[10]={0};
//只是赋值初始化而已,没有你说的const不可以传递给非const
int *p=a;
//只有在作为函数参数传递的时候,数组才几乎等于指针,其它他们不没有什么直接关系

[解决办法]
变量赋值给常量才有问题,常量赋值给变量一点问题都没有!!!!
数组名是指针常量,不是常量指针,const 指针!!!!


[解决办法]
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!

[解决办法]
引用:
Quote: 引用:

变量赋值给常量才有问题,常量赋值给变量一点问题都没有!!!!
数组名是指针常量,不是常量指针,const 指针!!!!
我自己好像理解了!就是说a是一个指针常量,说的是a不可以变,并不是指a指向的东西不可以变,所以是可以赋值给别人的,但是如果int *p=&a;就不行。因为会有可能改变的a的值,是吧。

不是这样的,数组名是一个指针常量,只是数组名的一个含义,数组名还代表整个数组 ---10个整型数据的集合。 
int *p=&a;之所以错误,是因为数组名是这个指针常量没有地址,是个常数。
&a 使用的是数组名的另一个含义,数组名还代表整个数组;
&a 是10个元素的数组,这个集合的地址,类型int (*)[10],或者int (*)[10] const(????)。
a 但看作指针常量时,是数组的首元素的地址,类型int *,严格点 int *const。
p 和 &a 的类型不匹配,&a 是个数组指针,


类型是 int (*)[10] ,p的类型int *,是个整型指针
int (*p)[10] = &a ,才是正确的;
 

热点排行