c指针初始化为一个数字类型,是类型铸造的

时间:2017-09-16 14:04:18

标签: c

在c编程中,以下初始化意味着什么,

char *ptr = (char *) 100;

这是否意味着我们已将名为ptr的指针初始化为指向位置100的另一指针,该指针本身就是指针。所以,基本上,100也是指针,我们设置指针指针。

2 个答案:

答案 0 :(得分:1)

你在想它。这意味着ptr是一个指向char的指针,它指向地址100.地址100处可能有任何(或没有);它是实现定义的,如果你尝试取消引用该指针,这段代码会做什么。

大多数具有MMU的体系结构将保留零页面并确保不能在那里映射内存。这意味着尝试读取或写入小于页面大小的任何地址(通常为4 KiB,因此为0x1000)将导致页面错误,并导致Linux上的SIGSEGV。这样做的目的是帮助捕获意外的NULL指针解除引用。

答案 1 :(得分:0)

此表达式可用于指向内存中特定地址的指针。 (几乎)不在托管环境中使用,但在嵌入式编程中常用。例子:

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)

其中:

#define GPIOA_BASE            (0x40010000 + 0x0800)
#define GPIOB_BASE            (0x40010000 + 0x0C00)
#define GPIOC_BASE            (0x40010000 + 0x1000)
#define GPIOD_BASE            (0x40010000 + 0x1400)
#define GPIOE_BASE            (0x40010000 + 0x1800)