【问题标题】:What is the memory address and pointer address in the following image? [closed]下图中的内存地址和指针地址是什么? [关闭]
【发布时间】:2021-01-03 19:23:13
【问题描述】:

我只是在玩指针。而且我只完全理解了第 5、6 和 10、11 行。 我想知道的是这里的指针地址是哪一个?第 7 行和第 14 行意味着什么?另外%p是什么意思,参考这段代码。

输出与行对齐

【问题讨论】:

  • 请不要将代码[或输出文本]作为图像或图像链接发布。请编辑您的问题并将源代码作为文本发布在代码块中。将您的程序输出 [再次以文本形式] 发布在单独的代码块中。
  • 第 6、8、10 和 13 行打印变量 x 的地址,以基数 10 或基数 16 为基数。第 12 和 15 行打印指针变量 p 的地址,其中包含x 的地址 - 分别以 10 为基数或以 16 为基数。第 7 行和第 14 行打印一个整数值,就像它是一个地址一样。
  • printf format string syntax 表示 %p 需要 void* 参数,因此第 7 行和第 14 行通过使用带有非指针参数的 %p 来调用未定义的行为。第 6 行和第 10 行也是如此,使用 %d 和非整数参数。

标签: c pointers memory-address dereference pointer-address


【解决方案1】:

首先第 7 行:是一个错误,因为您尝试打印一个指针值,但您向他传递了一个 int 值“i”,该值很好地打印了一个与该 int 十六进制(基数 16)相对应的地址。 对于第 14 行: (*p) 将 int 类型传递给指针是一样的,因为 *p 返回存储在指针中的值,为什么它再次打印十六进制地址以更了解更改 i 的值到 15 或更高它很好地给你他在 hex 上的价值。 指针的地址它是 (&p) 因为 &: 表示地址所以 & 的指针它是最后一行 15 。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多