可能的重复:
指针(地址)可以为负数吗? https://stackoverflow.com/questions/3304795/can-a-pointer-address-ever-be-negative
我正在考虑使用 memset 将结构初始化为所有 -1(因为它使用
没有带符号的数字,零是有效值)。
-1 是有效的指针地址吗?我的想法还有其他问题吗?
注意:平台是linux/gcc/x86
附:我正在尝试初始化一个不全是指针的结构,其中零对所有无效的类似值都有效,因此我可以选择在一个函数中进行部分初始化,并稍后将未初始化的字段初始化为默认值。如果有一个模式/策略可以在 c 中执行此操作?
的解释-1
因为指针是依赖于体系结构的,因此不可靠。
一般来说,memset
旨在设置字节,而不是指针。 C 不保证各个字节如何组合成指针。即使您的解决方案有效,您也必须记录其工作原理和原因。
更好的主意,当NULL
是一个有效值,就是将所有指针设置为适当类型的哨兵。所以,如果你的结构有一个字段int *ip
:
static const int sentineli;
// in the initialization:
foo->ip = (int *)&sentineli;
然后与该值进行比较。这是自我记录的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)