【问题标题】:Pointer value Null in CC中的指针值Null
【发布时间】:2015-01-02 07:46:33
【问题描述】:

指针名称---地址---值
------A--------- 1111-----2222
------B--------- 2222------3333
------C--------- 3333-----4444
------D--------- 4444-----停止

这里*A应该等于B,
这里*B应该等于C,
这里*C应该等于D,
我应该为 D 的值输入什么来指示列表的停止?放0危险吗?

【问题讨论】:

  • 请展示一个最小的可编译示例。
  • 你在这里没有告诉我们真实的故事。指针是一个变量,它包含以下两种内容之一:某块内存的地址,或 NULL 值。你想做什么?从细节退一步,给我们一个大局。
  • 如题所示,第二列和第三列都是指针,所以“stop”值也应该是指针,即NULL。因为您的指针指向其他指针,所以它们的“值”也是指针。

标签: c pointers null


【解决方案1】:

uintptr_t 是整数类型。这意味着“任何大小的整数都足以容纳指针的位”。因此,如果p 指向某个东西,(uintptr_t *)(p) 是指向整数的同一个地址,因此GET(p) 就是它指向的整数。 NULL 是指针类型,因此您尝试将其分配给整数,这是不允许的。

将允许为其分配值 0,但我不确定这是否是您想要的,因为您暗示您要将指针设为空,而分配 0 将使指针指向整数 0,而不是更改指针本身。

我怀疑你根本不需要所有的转换,但你真的只想处理指针。但是如果没有看到其余的代码,我无法知道您要做什么。

【讨论】:

  • 这根本没有帮助。什么是“WORD”(C 中没有这样的东西),为什么您认为地址属于一个?地址属于指针——它们就是这样。
  • 这里我假设字大小是内存地址大小。
  • 你为什么这么认为?如果需要内存地址,请使用指针。如果您想要整数值,请使用整数。不要混合它们,除非有一些重要的理由(比如你想将指针存储在由其他人编写的只保存整数的结构中)。 “WORD”可能意味着任何东西,它不是 C 语言的一部分。
  • 如何知道内存地址的大小?是 sizeof(void *) 吗?如果一个指针正在存储下一个指针的地址,为了读取地址,我不必决定读取多少字节吗?假设我知道内存地址长度,如何表明这个指针不再指向另一个地址?
  • 为什么要关心地址的大小?指针就是指针,它们只是工作。从这里的树上退后,给我们一些森林:你想做什么?一个链表,还是什么?
【解决方案2】:

NULL 通常定义为 (void*)0,即值为 0 的指针类型。

假设您有 A、B、C 和 D 的短裤(这就是您所说的 WORD 吗?即 16 位值)。

因此您需要为它们分配一个短路。

分配short的正确方法是使用short值,而不是使用指针,这就是NULL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多