1

考虑两个具有静态存储持续时间和相等的常量初始值设定项的对象:

static const int a = 50;
static const int b = 50;

编译器将这些组合起来是否有效&a == &b

(对于上下文,我正在考虑使用静态常量对象来获取唯一地址以用作标记指针值。如果编译器组合这些对象是合法的并且我对两个这样的对象使用相同的常量值,那么地址可以是平等的,我不能将它们用作哨兵值。)

4

2 回答 2

2

指针必须比较不相等。见 C99 6.5.9 第 6 段:

两个指针比较相等当且仅当两者都是空指针,都是指向同一个对象(包括指向对象的指针和在其开头的子对象)或函数的指针,两者都是指向同一数组最后一个元素的指针对象,或者一个是指向一个数组对象末尾的指针,另一个是指向另一个数组对象的开头的指针,该数组对象恰好紧随地址空间中的第一个数组对象。

于 2013-05-23T17:53:08.890 回答
1

不,标准禁止这样做。不同的对象必须有不同的地址。在const char a[]="abc", b[]="abc";ab被分配在不同的地址。如果它们是指针也是如此:在const char *a="abc", *b="abc",a andb` 中也分配在不同的地址;它们指向的字符串常量可以是单个常量数组,就好像它是一个命名对象一样。

于 2013-02-08T05:26:48.030 回答