这是c语言的缺点。const 常把人搞混。
要记住的是 const 限定它下面紧接着的东西 是 “只允许读”,它不是左值
另外记住,只有能当“左值”的东西才能 被赋值。
int * const p; (1)*p 是 左值, 可读写.(2) 限定 p 不是左值。
const int *p;(1)p 是 左值, 可读写. (2) 限定 *p 不是左值.
程序例子:
#include<stdio.h>
main(){
{
int a=5,b=6;
int *const p = &a; // const p --not l-value
*p = a; // *p 是 左值, 可读写
printf("a=%d b=%d *p=%d p=%p\n",a,b,*p,p);
*p = b; // *p 是 左值, 可读写
printf("a=%d b=%d *p=%d p=%p\n",a,b,*p,p);
}
printf("=============\n");
{
int a=5,b=6;
const int *p; // *p -- not l-value
// *p = a; // err
p=&a; // p 是 左值, 可读写
printf("a=%d b=%d *p=%d p=%p\n",a,b,*p,p);
p=&b; // p 是 左值, 可读写
printf("a=%d b=%d *p=%d p=%p\n",a,b,*p,p);
}
}
追问恩 但为什么常量的地址也不能作为右值?比如 const int x=3;
int * pp;令pp=&x; 则错误!为什么?/weixiao 求解