二进制'operator +'的'int *'和'int *'类型的无效操作数

时间:2019-10-21 12:39:07

标签: c++ pointers

我正在尝试一些基本的C ++示例。我无法理解上述编译错误的原因。这是我正在尝试的示例。

$cfg['SendErrorReports'] = 'never';

我知道上面的void update(int *a,int *b) { int c = a+b; // Error occurs here int d = a-b; // But not here int e = a*b; // Error int f = a/b; // Error } int main(){ int a = 4, b = 8; update(&a, &b); } 情况使两个内存地址之间的差为a-b的大小的倍数,因此int将为-1(更新:假定{ {1}}和d是内存中的连续变量。

有人可以向我解释一下其他三种情况下发生的情况以及错误的含义。

1 个答案:

答案 0 :(得分:2)

有效指针包含内存中某个位置的地址。语言内置了指针变量的概念,这意味着默认情况下允许的运算符也内置于该语言中。

两个指针的减号或减号运算符在编程中有许多有用的应用,因为它为您提供了两个内存位置之间的差值或偏移值。

相等或不相等的逻辑运算符在编程中也有许多有用的应用程序。

问题是其他运算符(例如加,乘和除运算符)可能具有什么效用。

在指针上添加或减去偏移量的想法很有意义,因为它是一种可以在一系列内存位置上进行迭代的方式。

两个指针相加应该做什么?添加两个指针的作用是什么?结果应该是什么?

如果我们认为内存是一条线,而指针是一个变量,则该变量包含沿该行的位置,那么也许我们可以对数学上的含义进行理解,即指针的哪些运算符有意义并且具有效用,而哪些运算符没有意义。 / p>

我们对指针变量数学所做的事情是一种翻译形式。当我们向指针添加或减去偏移量时,我们会将位置从行上的一个位置转换为另一个位置。

当我们减去指针时,我们得到一个偏移量,该偏移量指示我们需要从两个指针中的任意一个相加或减去的值,以将一个指针转换为另一个指针的位置。

逻辑运算符告诉我们两个指针之间的关系,无论它们是在线上的同一位置还是一个指针大于或小于另一个指针。

添加两个指针如何帮助我们平移指针或确定直线上两个点之间的关系?如果一个指针变量包含一个向量,一个带有方向的点,那么添加两个指针将是有意义的,因为它将添加两个向量。但是,指针是不包含向量的变量,指针没有方向。指针包含一个沿一维线的位置的值。