为了账号安全,请及时绑定邮箱和手机立即绑定

为什么a,b使用指针交换值编译通过,但出现异常值?(什么先输出大先输出小就别管了,懒得改)

/ 猿问

为什么a,b使用指针交换值编译通过,但出现异常值?(什么先输出大先输出小就别管了,懒得改)

张幼安 2017-08-07 11:00:51

#include <stdio.h>
int main()
{//整数按从小到大排列,不破坏原数值
void swap(int *p1,int *p2); //申明swap函数
int a,b;                    //定义初始变量
int *pointer_1,*pointer_2;  //定义两个指针变量
printf("please enter a and b:\n");
scanf("%d,%d",&a,&b);       //将输入的两个常数赋值给初试变量a ,b
pointer_1 = &a;
pointer_2 = &b;
if (a>b)swap(pointer_1,pointer_2);
printf("min = %d,max = %d\n",b,a);
printf("max = %d,min = %d",*pointer_1,*pointer_2);
return 0;
}
void swap(int *p1,int *p2)
{
 int p;
 p = *p1;
 *p1 =*p2;
 *p2 = p;
}

查看完整描述

8 回答

?
AIxer

操作系统还没那么弱,用scanf()格式化输入,你不按照格式来scanf()是不读取的,所以也不会出现溢出不溢出的情况, 所以 a ,b 里面还是垃圾值。声明变量最好初始化,尤其是指针。 勤快点,多用printf语句输出些内容看看     ^_^ 加油咯

查看完整回答
1 反对 回复 2017-08-07
?
吴邪Cc

serf

查看完整回答
反对 回复 2017-08-07
?
氵5
确定按照scanf的格式输入了吗?你可以在scanf后面printf看看输入成功没
查看完整回答
反对 回复 2017-08-07
?
精慕门1091730

我看可能是你没在main函数前声明一下函数,swap函数找不到入口

查看完整回答
反对 回复 2017-08-07
?
扶摇万仞

可以看下这个:

https://liuyanzhao.com/3521.html

查看完整回答
反对 回复 2017-08-07
?
张幼安

那个,上述表述不清,不好意思哈。因为输入是能实现的。原意是想问,就是说输入的时候,不按格式输入,会出现异常值,操作系统内部是溢出还是?

查看完整回答
反对 回复 2017-08-07
?
爱学习爱啪啪

scanf("%d,%d",&a,&b); 输入a、b值时,之间的逗号不要忘记。

查看完整回答
反对 回复 2017-08-07
?
whangcheng

swap()函数无返回值,交换只在函数swap()内部起作用,而在主函数中并未交换值

应该把swap()该为int型,让函数swap()有返回值

查看完整回答
1 反对 回复 2017-08-07

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信