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语言中取地址就是针对变量的操作,就是这么规定的。不能对常量这么操作,这是这种语言的规则。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com