gpt4 book ai didi

c++ - C语言中*(int *)是什么意思

转载 作者:行者123 更新时间:2023-11-30 20:43:56 26 4
gpt4 key购买 nike

#define value1 *(int*)46

我在微 Controller 的中断(寄存器)和外设的地址定义的头文件中遇到了类似的语句。

我如何解释它?

我们通过类型转换并使用 * 运算符从中提取值来将 46 设为指针类型。因此位置 46 处的值必须存储在 value1 中。

会发生什么?

printf("%d",&value1)

这将返回 x 的地址 46。

printf("%d",value1)

这会产生运行时错误。当我们尝试访问 x 的值时也会出现运行时错误。

以下是我的问题:

  1. *(int *)46 到底是什么意思?

  2. 什么是 value1?整数指针或整数

对于像我这样的初学者来说,关于此或任何其他使用指针的方式的更多信息和额外评论是非常受欢迎的。预先感谢您。

最佳答案

使用x = *(int*)46,您将从内存中读取sizeof int字节,从地址46开始。

使用*(int*)46 = x,您将sizeof int字节写入内存,从地址46开始。

当然,此操作之前应该先正确分配该内存块。

<小时/>

请注意,根据您的平台(底层硬件架构+指定编译器),不能保证实际操作确实会从给定的内存地址开始。

更具体地说,如果地址未与 int 对齐(不能被 sizeof int 整除),并且您的平台不支持未对齐的加载/存储操作,则结果这样的操作不会是你所期望的。例如,您可能会收到“非法内存访问”异常,或者操作可能从与 int 对齐的最近的较小地址开始。

<小时/>

我可能应该强调,如果在此操作之前没有在该内存地址正确分配int block ,那么C语言标准未定义此类操作的结果无论我之前提到的条件(地址的具体值和所使用的平台类型)。

<小时/>

编辑:

好吧,我忘记了我在这个网站上与谁打交道。

很快就会删除这个答案,以免给 SO 律师带来麻烦。

下次我就写UB,这样这里的每个人都会满意(实际问题将仍然没有答案)...

关于c++ - C语言中*(int *)是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38651648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com