1
76
不,地址并不总是正的-在x86\u64上,指针是符号扩展的,地址空间是围绕0对称聚集的(尽管“负”地址通常是内核地址)。
您应该创建一个具有静态存储持续时间的虚拟对象,并将其地址用作
|
2
21
指针的有效值完全依赖于实现,所以,是的,指针地址 要消极。 但是,更重要的是,考虑一下(作为一个可能的实现选择的示例)您所处的32位平台具有32位指针大小的情况。任何可以由该32位值表示的值都可能是有效的指针。除了空指针,任何指针值都可能是指向对象的有效指针。 对于您的特定用例,您应该考虑返回一个状态码,并可能将指针作为函数的参数。 |
3
17
尝试将特殊值复合到返回值上通常是一个糟糕的设计。。。你试图用一个值做太多的事情。通过参数而不是返回值返回“success pointer”会更干净。对于您要描述的所有条件,在返回值中留下大量不冲突的空间:
|
4
5
C语言没有定义指针的“否定性”概念。“为负”的性质主要是算术性质,决不适用于指针类型的值。
如果有指针返回函数,则不能有意义地返回
如果要创建保留指针值,则无需
|
5
4
|
6
1
失败和单一化有什么区别。如果unitialized不是另一种失败,那么您可能需要重新设计接口来分离这两种情况。
|
7
0
@当然,詹姆斯是对的,但我想补充一点,指针并不总是代表 绝对的 相对的 指向内存中某个点的地址,通常是堆栈或帧指针,这些地址可以是正的也可以是负的。
|
8
0
詹姆斯的回答可能是正确的,但当然描述了 实施 选择,不是你能做的选择。
可以
|
9
0
现在考虑以下代码(可为AndreyT编译):
这在某些情况下可能有用。 它不适用于哈佛的一些架构,但适用于冯诺依曼的架构。 |
10
0
不要使用
|
11
0
您不需要关心指针的符号性,因为它是实现定义的。真正的问题是 “如何从返回指针的函数返回特殊值?” Pointer address span on various platforms
但是通过利用变量必须正确对齐这一事实,可以返回更多的错误状态(除非指定了其他选项)。例如在指向
您还可以使用高位在64位系统中存储数据。ARM上有一个标志,告诉CPU忽略地址中的高位。在x86上没有类似的东西,但您仍然可以使用这些位,只要在取消引用之前使其规范化。看到了吗 Using the extra 16 bits in 64-bit pointers 另请参见 |
12
-1
请记住,指针基本上是一个32位的值;这是一个可能的负数还是总是正数只是一个解释问题(即32 钕 位被解释为符号位或数据位。因此,如果将0xFFFFFFF解释为有符号数,它将是-1,如果将其解释为无符号数,它将是4294967295。从技术上讲,指针不大可能有这么大,但无论如何都应该考虑这种情况。 作为替代,你可以使用一个额外的 无效的 但是,这将要求客户机创建并传递一个值,即使他们不需要区分特定的错误。
|
13
-1
正或负不是指针类型的有意义方面。它们与有符号整数有关,包括有符号字符、short、int等。
人们在把指针的机器表示形式看作整数类型的情况下谈论负指针。例如
在某些情况下,我认为指针本质上是无符号的,我们用下面或上面的术语来讨论地址。
但在其他情况下,如指针减法
注意没有
|
Community wiki · safe_ptr实现 1 年前 |
lplplplp · 为什么不能访问函数外的结构指针 2 年前 |
Fabio · 在c中将指针赋给常数指针++ 2 年前 |
Gabe Tucker · 无法在golang中分配接口对象指针 2 年前 |