C中的指针值为空

C中的指针值为空,c,pointers,null,C,Pointers,Null,指针名称---地址---值 ---------A------1111------2222 ---------B------2222------3333 ---------C------3333------4444 ---------D------4444-----停止 这里*A应该等于B, 这里*B应该等于C, 这里*C应该等于D, 我应该为D的值输入什么来表示列表的停止?放置0是否危险?uintpttr\u t是整数类型。它的意思是“任何大小的整数都足以容纳指针的位”。因此,如果p指向某个对象

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

这里*A应该等于B,
这里*B应该等于C,
这里*C应该等于D,

我应该为D的值输入什么来表示列表的停止?放置0是否危险?

uintpttr\u t
是整数类型。它的意思是“任何大小的整数都足以容纳指针的位”。因此,如果
p
指向某个对象,
(uintptr\u t*)(p)
是指向整数的同一地址,因此
GET(p)
是它指向的整数
NULL
是指针类型,因此您试图将其分配给整数,这是不允许的

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


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

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

假设你对A、B、C和D有短路(这就是你所说的单词的意思吗?即16位值)

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


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

请给出一个最小的可编译示例。您在这里并没有告诉我们真实的情况。指针是一个变量,它包含以下两个内容之一:某个内存段的地址或NULL值。你想干什么?从细节中退一步,给我们一个大局图。正如当前显示的问题,第二列和第三列都是指针,因此“stop”值也应该是指针,即NULL。因为您的指针指向其他指针,所以它们的“值”也是指针。这根本没有帮助。什么是“单词”(C中没有这样的词),为什么你认为地址属于一个单词?地址属于指针——它们就是指针。这里我假设单词大小是内存地址大小。你为什么这样假设?如果需要内存地址,请使用指针。如果需要整数值,请使用整数。除非有必要(比如你想把指针存储在别人写的只保存整数的结构中),否则不要混合使用它们。“WORD”可能意味着任何东西,它不是C语言的一部分。我如何知道内存地址的大小?它的大小是(void*)?如果一个指针正在存储下一个指针的地址,为了读取地址,我不需要决定要读取多少字节吗?假设我知道内存地址的长度,我如何指示该指针不再指向另一个地址?为什么关心地址的大小?指针就是指针,它们只是工作。从这里的树上退一步,给我们一些森林:你想说什么?链表之类的?