数组名是char *const吗?该如何处理
数组名是char *const吗?1.如果数组名是char *const 那么:int a[10]a++;这时候a++就会出错2.如果数组名
数组名是char *const吗?
1.如果数组名是char *const ;
那么: int a[10]; a++; 这时候a++就会出错;
2.如果数组名不是 char * const;
(1)
C/C++ codeint main(){ char * p="woaini"; char a[10]; a=p;}VS2010 报错 说:error C2440: “=”: 无法从“char *”转换为“char[10]”
(2)接着(1)将代码改进!
C/C++ codeint main(){ char p[10]="woaini"; char a[10]; a=p;}VS2010又报错:“=”: 左操作数必须为左值;说明a这时候是一个右值? 这时候a的类型是什么? 是const char * ,char *const ,char []?
(3)
C/C++ codeint main(){ char a[10]="woaini"; char *pa1=a; char * const pa2=a; const char *pa3=a;}上述代码运行无错,a此时应该是右值吧,他可以转换为左边的三种类型?
综上所述:
是不是数组名 在左值和右值的情况下不同?请详细解释一下!
[解决办法]数组就是数组……只是大部分情况下它会隐式转换为指针而已,但是这并不是说他就是指针了
[解决办法]数组名代表了数组的首地址,但并不是指针,只是在作为函数的参数的时候,会自动退化为指针。最后强调:数组就是数组,指针就是指针,不要误以为二者是一样的。
[解决办法]不能给数组直接赋值,元素要一个一个赋值。最好用for循环。
将字符串首地址传给一个数组a的第一个元素,因为与该元素匹配的类型是char,与右值不符,所有报错了。
[解决办法]数组与指针
[解决办法]不能将一个字符数组的内容赋给另一个字符数组
char *pa1=a;
char * const pa2=a;
const char *pa3=a;
是将a数组的首地址赋给指针pa1,2,3
时刻注意:指针变量就是保存那个字符串常量的地址
[解决办法]数组名可以理解为:指针常量,所以对指针常量赋值,即修改是不可以的。
const char *p;这样定义的指针变量p,说明p指向的数据不可以修改,即是常量。
char *const p;这样定义的指针变量p,说明p是一个常量,即p指向的地址不可以修改。即
char ch; char * const p = &ch; 如果在执行下面的语句就不可以了:
char ch1; p = &ch1;因为是P指向的地址不可以修改。