由于地址是数字并且可以分配给指针变量,我可以直接将任何整数值分配给指针变量,如下所示:
int *pPtr = 60000;
由于
答案 0 :(得分:8)
您可以,但除非您使用已明确允许的编译器为具有已知内存地址的嵌入式设备进行开发,否则尝试取消引用此类指针将调用未定义的行为。
您应该只分配变量的地址或内存分配函数的结果,例如malloc
或NULL
。
答案 1 :(得分:1)
可以。 您应该只分配变量的地址或内存分配函数(例如malloc或NULL)的结果。
答案 2 :(得分:0)
根据指针转换规则,例如如this在线c ++标准草案中所述,任何整数都可以转换为指针值:
6.3.2.3指针
(5)整数可以转换为任何指针类型。除了 以前指定的,结果是实现定义的,可能不是 正确对齐,可能不指向引用的实体 类型,可能是陷阱表示。
但是,允许转换并不意味着您可以取消引用指针。
答案 3 :(得分:0)
你可以做很多事情。
1)是什么意思?
实际使用时唯一真正有用的抽象是你需要访问一个特定的内存位置,因为某些东西被映射到一个特定的点,通常是硬件控制寄存器(不太常见:flash中的特定区域或链接器表) )。您分配60000(十进制数而不是十六进制地址或符号助记符)的事实让我非常担心。
2)你有"奇怪"指针?
某些微控制器的指针具有奇怪的语义(远近远,与特定的内存页面绑定等)。您可能需要做一些奇怪的事情才能使指针有意义。另外,根据指向的位置,一些指针可以做奇怪的事情。例如,PIC32系列可以指向完全相同的数据,但具有不同的高位,可以检索缓存副本或未缓存的副本。
3)该值是指针的正确大小吗?
不同的架构需要不同的尺寸。像intptr_t这样的新数据类型就是为了解决这个问题。