c指针初始化到类型为铸造的数字WQ

c指针初始化到类型为铸造的数字WQ,c,C,在c编程中,以下初始化是什么意思 char *ptr = (char *) 100; 这是否意味着我们已经初始化了一个名为ptr的指针,指向另一个指向位置100的指针,该位置本身就是一个指针。所以,本质上,100也是指针,我们将指针设置为指针。您考虑得太多了。这意味着ptr是指向char的指针,它指向地址100。地址100可能有任何东西(或什么都没有);如果您尝试取消引用该指针,则此代码将执行的操作由实现定义 大多数带有MMU的架构将保留零页,并确保没有内存可以映射到那里。这意味着,尝试读取或

在c编程中,以下初始化是什么意思

char *ptr = (char *) 100;

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

您考虑得太多了。这意味着
ptr
是指向char的指针,它指向地址100。地址100可能有任何东西(或什么都没有);如果您尝试取消引用该指针,则此代码将执行的操作由实现定义


大多数带有MMU的架构将保留零页,并确保没有内存可以映射到那里。这意味着,尝试读取或写入任何小于页面大小的地址(通常为4kib,因此为0x1000)将导致页面错误和Linux上的SIGSEGV。其目的是帮助捕获意外的空指针解引用。

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

#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)

100
本身是一个常量
int
值,没有任何特殊意义。这是表达式
(char*)100
,它是指向地址
100
的指针。谢谢。我说得更具体了。