求助大神 关于指针的题

[复制链接]
查看11 | 回复5 | 2021-1-27 06:01:33 | 显示全部楼层 |阅读模式
小白对指针不懂老师说用指针实现两个数的加


分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:01:33 | 显示全部楼层
指针加*号代表取值,当指针p指向a的时候*p就是a的值
回复

使用道具 举报

千问 | 2021-1-27 06:01:33 | 显示全部楼层
《C++Primer第五版中文版》中提到
操作符*叫做解引用符,如果指针指向了一个对象,则允许使用解引用符来访问该对象。对指针解引用会得出所指向的对象。
你的代码写的挺不错的,我稍微改了下
#include
intadd(int*p,int*q);
intmain()
{
inta,e,c;
printf("输入两个数:\n");
scanf("%d%d",&a,&e);
c=add(&a,&e);
printf("%d\n",c);
return0;
}
intadd(int*p,int*q)
{
intt;
t=*p+*q;
returnt;
}
以下是在VS2015中调试的结果


回复

使用道具 举报

千问 | 2021-1-27 06:01:33 | 显示全部楼层
理解int*p的时候,最好理解成(int*)p,(int*)是一种类型,叫指针,当然(char*)(float*)....都是指针;
所以你写的add函数,理解成intadd((int*)p,(int*)q),然后main里面调用的时候执行的是p=a;q=e;而并非*p=a;*q=e;这两者的区别就是:p=a时前面是(int*)后面是int,类型不一致,一般编译器会报错,如果不报错,就等于让p指向了a的地址即*p的值是a的地址而不是a的值(等同*p=&a);而*p=a,才是你想要达到的效果,把a的值给p,两边都是int
回复

使用道具 举报

千问 | 2021-1-27 06:01:33 | 显示全部楼层
引用2楼棉猴的回复:《C++Primer第五版中文版》中提到
操作符*叫做解引用符,如果指针指向了一个对象,则允许使用解引用符来访问该对象。对指针解引用会得出所指向的对象。
你的代码写的挺不错的,我稍微改了下
#include
intadd(int*p,int*q);
intmain()
{
inta,e,c;
printf("输入两个数:\n");
scanf("%d%d",&a,&e);
c=add(&a,&e);
printf("%d\n",c);
return0;
}
intadd(int*p,int*q)
{
intt;
t=*p+*q;
returnt;
}
以下是在VS2015中调试的结果


大神所谓的挺不错指的是什么?从哪几行代码看出来的?


回复

使用道具 举报

千问 | 2021-1-27 06:01:33 | 显示全部楼层
t是野指针,*t=*p+*q;可能会导致段错误;建议直接用intt;t=*p+*q;returnt;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行