关于c++指针的问题

问题遇到的现象和发生背景

想用指针算两数和差,但是程序到addition()函数里面就不跑了,不知道为啥

用代码块功能插入代码,请勿粘贴截图
#include 
#include 
using namespace std;
void addition(int*i,int*j,int*sum,int*subtract);
int main()
{
    int*sum=0;
    int*subtract=0;
    int m=4,n=8;
    addition(&m,&n,sum,subtract);
    cout<<*sum<<"\t"<<*subtract;
    return 0;
    
}
void addition(int*i,int*j,int*sum,int*subtract)
{
    *sum=*i+*j;
    *subtract=*i-*j;
    return;
}

运行结果及报错内容

程序刚进入addition就不跑了

我想要达到的结果

希望帮忙找出bug

img

#include <iostream>
#include <cstdlib>
using namespace std;
void addition(int i,int j,int *sum,int *subtract);
int main()
{
    int sum=0;
    int subtract=0;
    int m=4,n=8;
    addition(m,n,&sum,&subtract);
    cout<<sum<<"\t"<<subtract;
    return 0;
    
}
void addition(int i,int j,int *sum,int *subtract)
{
    *sum=i+j;
    *subtract=i-j;
}
 

7,8行的变量定义成指针没分配内存空间,非法访问造成段错误了,建议直接定义成 int num;然后函数传参数是取地址&num

int*sum=0;
这是在闹啥,你把指针指向内存地址是0的地址
然后就要给这个内存写入数据?
系统没写崩了只能说CPU够智能
此外,你这代码问题多了
i和j不返回值,不要定义为指针
sum返回值,定义为&sum即可,也不需要定义为指针
那么形参搞定了之后,实参可以都是int型,可以没有指针

int * sum=0;
int * subtract=0;
这2个指针指示声明并赋值NULL,形成了所谓的空指针,你给他赋值没意义。
int * sum, isum;
sum=&isum; //要让指针指向一个有意义的地址后才能赋值
int * subtract,sub;
subtract=&sub
int m=4,n=8;
addition(&m,&n,sum,subtract);

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632