【问题标题】:Assign value to pointer [duplicate]为指针赋值[重复]
【发布时间】:2019-02-09 00:17:17
【问题描述】:

我的代码如下:

unsigned int* Adc = 0x2000;

据我了解,ADC的地址是0x2000,对吗?
如果我想为 Adc 赋值,我就这样写:

Adc = 88;

正确与否?

【问题讨论】:

  • 不,这是不正确的,这不是有效的 C 代码。你会想要类似volatile uint16_t* Adc = (volatile uint16_t*)0x2000; .. *Adc = 88;
  • @Lundin 副本实际上是向后的
  • @AnttiHaapala Gah,你是对的。他们在标题中说一件事,然后做另一件事。不是一个好的规范骗局。无论如何,出于同样的原因,您也不能反过来做。我会寻找更好的规范帖子。
  • @AnttiHaapala 我没有发现好的规范骗局,但这是一个非常常见的常见问题解答。所以我最终自己写了一个问答风格:“Pointer from integer/integer from pointer without a cast” issues。非常感谢校对:)

标签: c


【解决方案1】:

据我了解ADC的地址是0x2000,对吗?

几乎,unsigned int* Adc = 0x2000; 用那个 初始化 Adc。如果 0x2000 不是分配该指针的有效值,则结果是 未定义行为 (UB),因此希望有一些系统相关信息表明这是 unsigned 指针的有效地址。

指针Adc 存在于内存中某个地址的某个位置。 Adc 的地址对您的目标几乎没有影响。

需要明确的是,指针Adc为0x2000,而Adc 存在于内存中某个地址的某个位置。

正确与否?

不完全是。 Adc = 88; 从原来的0x2000 为指针Adc 分配一个新的

要更改Adc 指向的内存,取消引用它:*Adc = 88;

【讨论】:

  • 好吧,Adc = 88 没有分配,因为它违反了约束……然后实现将由实现决定。
  • @AnttiHaapala 将整数分配给指针是实现定义的,而不是违反约束。
  • @Barmar 整数不能在没有显式转换的情况下转换为指针,除非它是空指针常量(初始化也是如此)。
  • @AnttiHaapala,对不起,我还没有完全明白。这两个代码之间: unsigned int* Adc = 0x2000;无符号整数 Adc = 0x2000;区别是第一个 Adc 是指针,第二个 Adc 是变量?但两者的值都与 0x2000 相同,是否正确?
  • @Rambe 它们都是变量。第一个是指向unsigned int 的指针,另一个是unsigned int。指针没有什么特别之处。
猜你喜欢
  • 2019-11-05
  • 2021-01-13
  • 1970-01-01
  • 2014-09-06
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-11
  • 2019-07-10
相关资源
最近更新 更多