我在做一个随机练习,给定一个整数数组和一个双数组,你应该计算一个整数和一个双数组的大小。
对于整数大小,我只使用两个指针指向两个相邻的数组,然后找到它们之间的差异。因为指针算术将其计算为差1,所以我将指针转换为整数,因为我假设指针将显式引用4字节的内存,并且得到了正确的结果(4)。
现在,我对双打也尝试了同样的方法,但是我得到了一个错误:pointer value used where a floating point value was expected
一种可能的猜测是,doubles是8字节,而指针是4字节。但我不确定这是否真的重要。
有什么见解吗?
我的准确台词:

int doubSize = (double)doubPtr2 - (double)doubPtr1;
//where doubtPtr1 and doubPtr2 poiny to two adjacent indexes of double array

最佳答案

标准允许将指针强制转换为整数类型,但是除非该类型足够大,否则强制转换将无法恢复原始指针。尽管如此,实际的映射是由实现定义的,尽管有人建议它应该模拟底层内存体系结构,这大大限制了这样做的效用。浮点数类型没有此类许可证。
查看intptr_t以确保足够大的类型。
不管怎样,更好(而且正确)的方法是将这些指针指向相邻的数组元素,将它们强制转换为char*char保证为一个字节大,一个字节不保证为八位字节),并将它们减去。(对于运算符,结果类型应size_t
这就预先假定,对于你的练习,sizeof被任意禁止,否则这将是这里选择的解决方案。

07-24 09:46
查看更多