数组名是指针常量,为什么可以赋值给非const指针
数值名是指针常量,为什么可以
int a[10]={0};
int *p=a;
或者是作为函数参数传递给指针。
不是说const不可以传递给非const吗 指针 数组 c 传递
[解决办法]
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还能修改正运行的其它进程的内存里面的所谓常量呢!
[解决办法]
不是这样的,数组名是一个指针常量,只是数组名的一个含义,数组名还代表整个数组 ---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 ,才是正确的;