在 IOS8.1 和 XCode 6.1.1 中,我在处理一些指针算法时遇到了编译器错误。调试后,我归结为以下编译行和不编译行的代码片段。我不明白为什么编译器会以不同的方式解释它们:
struct kd_node_struct* find_median(struct kd_node_struct *startNode, struct kd_node_struct *endNode, int dimensionNumber)
{
//these lines compile fine
struct kd_node_struct *median = endNode - endNode + startNode;
struct kd_node_struct *median2 = (startNode - endNode) / 2;
struct kd_node_struct *median3 = startNode + ( (endNode - startNode) / 2);
//these lines give "invalid operands to binary expression" error
struct kd_node_struct *median4 = endNode + endNode + startNode;
struct kd_node_struct *median5 = (startNode + endNode) / 2;
}
不管这些语句实际计算的是什么,我不明白为什么这些操作看起来与编译器不同。 median 与 median4 有何不同,除了以 + 或 - 运算符开头? median2 和 median5 相同。如果 median5 失败,我真的不知道 median3 是如何编译的。
我发现错误消息特别令人困惑...
Invalid operands to binary expression('struct kd_node_struct *' and 'struct kd_node_struct *')
...因为对我来说这看起来像是两种相同的类型。
我在这里错过了什么?
*编辑:当 median2 编译时,它确实有一个警告:
Incompatible integer to pointer conversion initializing 'struct kd_node_struct *' with an expression of type 'long'
最佳答案
...because that looks like two identical types to me.
是的,但是添加指针是无意义的操作,所以语言不允许。减法没问题。
while median2 compiles, it does have a warning:
是的,因为您创建了一个整数(指针差除以二),并且您正试图用它初始化一个指针变量。
median3
是您拥有的唯一正确/有意义的代码。 median1
在语法上是正确的,但等同于 median = startnode
,这可能不是您想要的。
关于c++ - 指针运算 : how are these statements different?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28390227/