【发布时间】:2012-08-31 14:13:55
【问题描述】:
我正在处理一些内存指针。我不想使用散列定义,请把讨论放在一边。我只是想知道为什么这不能编译:
#include <stdio.h>
static const unsigned long *const pMemAddrA = (unsigned long *) 0x00000200ul;
static const unsigned long *const pMemAddrB = pMemAddrA;
int main (void)
{
printf("%x", (unsigned int) pMemAddrB);
return 0;
}
编译器输出 gcc:
||=== TestConst, Debug ===|
...main.c|4|error: initializer element is not constant|
||=== Build finished: 1 errors, 0 warnings ===|
编辑:
阅读答案后,我很高兴知道如何解决这个问题。
但是我不明白为什么这是一个问题。据我所知,静态内存是在程序启动时分配的。我知道如果变量“活”在不同的文件中,并且编译器不能保证变量的分配顺序,就会出现问题。但是,如果两个变量都“存在”在同一个文件中 - 就像两个变量都存在于同一个函数中一样 - 我认为编译器可以确保按照文件中声明的变量的顺序分配内存,因此我不会不明白为什么声明和初始化指向另一个 const 指针的 const 指针是一个问题。如果有人能启发我,我会很高兴。
【问题讨论】:
-
不工作是什么意思?如果它没有编译发布编译器错误,如果它显示意外输出发布输出。
-
如果您要添加 what “不起作用”的意思,我们可以为您提供更好的帮助。
-
很遗憾,声明一个变量 const 并不意味着它是一个常量,这可能会造成混淆。