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

标签 c++ pointers

<分区>

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

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 大小的倍数,所以 d将为 -1(更新:假设 ab 是内存中的连续变量)。

谁能解释一下其他三种情况下发生了什么以及错误的含义。

最佳答案

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

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

相等以及大于或小于的逻辑运算符在编程中也有许多有用的应用。

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

向指针添加或减去偏移量的想法很有意义,因为它是一种能够迭代一系列内存位置的方法。

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

如果我们将内存视为一条线,而指针是一个包含沿线位置的变量,那么也许我们可以对指针的哪些运算符有意义和实用性以及哪些运算符没有意义和实用性有一个数学概念。

我们用指针变量数学所做的是一种翻译形式。当我们添加或减去指针的偏移量时,我们将位置从线上的一个位置转换到另一个位置。

当我们减去指针时,我们得到一个偏移量,它指示我们需要从任何一个指针中添加或减去什么值以将一个指针转换到另一个指针的位置。

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

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

关于c++ - 类型 'int*' 和 'int*' 到二进制 'operator+' 的无效操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58486497/

相关文章:

java - 不同风格的程序流程?

c++ - 在 catch block 异常中无意义地使用引用传递语法?

c++ - 未解析的外部符号“public :

c - 在单词数组中查找具有特定开头字母的单词

c++ - 删除 vector 指针

c++ - 你如何在 C++ 中使用带指针的冒泡排序?

c - 为什么没有不可变的整数集而不可变的字符集是可能的?

C++ 简单指针传递

c++ - 将 for 循环从 matlab 转移到 c++

c++ - 找到包含 200000+ 个元素的 2 个数组元素的最小乘积的最快方法