C语言,一个常量为什么不能取地址?比如&8或者&2056之类的?
发布网友
发布时间:2024-10-24 14:58
我来回答
共2个回答
热心网友
时间:2024-10-29 17:03
只有保存在内存中的变量或常量,才会有一个与之相关的内存编号(地址)。像8,3.14159,"yes"等直接量,它们的值不会、也没有必要保存到内存中。因此,一般不能取这样的直接量的地址。
此外,也不能取一个宏的地址,如:
#define PI 3.14
//不能取PI的地址
//double *p=Π
以下可行(且是常规做法):
const int n=1;
const int *pi=&n;
因为n保存在内存中,而const用来指定这个内存不可修改。
以下也可行(但是非常规做法,有风险):
int *pi=(int*)2056;
这句的意思是将2056当成一个内存的地址,令pi指向这个地址。因为编号为2056的内存的情况是未知的(它是哪个程序的?是系统内存?是位于数据区还是代码区?可读写吗?),因此,这样存在巨大的风险。
热心网友
时间:2024-10-29 17:03
你好,C语言中取地址就是针对变量的操作,就是这么规定的。不能对常量这么操作,这是这种语言的规则。