【发布时间】:2018-07-29 13:28:36
【问题描述】:
整数指针(但实际上是任何指针类型)的特别之处在于您可以为它们分配NULL 一个非整数类型的值;而一个整数无论如何都必须存储一个整数,无论是正数还是负数(如果我错了,请纠正我),并且没有非整数值。
然后你能不能利用指针的这个“特殊”特性(作为一个可以存储整数和非整数值的变量:NULL)来同时存储整数值(通过它们的字面量实际值,而不是地址,它将存储有符号/无符号整数)并且是一种boolean - 其中NULL pointer 将表示false 和valid pointer(即持有整数的人)(但不是真正有效的 ofc,只是不是NULL)将表示true。
注意:指针绝对不会用于访问内存位置,只是为了存储一个 int。
(Ofc 这只是针对特定用例,而不是您会在常规代码中执行此操作)
(如果你真的想知道) 我正在尝试做一个递归函数,并希望函数的返回值返回一个整数,但也想跟踪一个条件,所以我也希望它返回一个布尔值,但你显然只能返回一个参数......所以可以传递一个整数指针,一个可以同时执行两者的变量,是解决方案吗?
我想到了其他方法(结构、数组..),但很好奇使用整数指针是否可行。
【问题讨论】:
-
什么?您不能将 integer 存储到 pointer 中。您可以使用显式强制转换和实现定义的行为将整数转换为指针。您的设计只有个缺点。你需要重新考虑你的方法。
-
@Antti Haapala 嗯,你可能是对的.. 但你不能这样做:int *ptr = 5; --- 而不是 --- int *ptr = &var; ?
-
什么是整数指针?你的意思是
int *或intptr_t还是什么? -
是的,我的意思是int *,那你怎么称呼它(int *)?
-
问题是为了什么?将它存储在同一类型的对象中不是更容易吗?这是创建 MISRA 的原因之一。不允许这种导致 UB 和极难发现错误的荒谬想法。
标签: c pointers integer boolean