有关VC++的问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 19:31:00
我在运行下面程序时出现了这样的图画
#include<stdio.h>
main()
{
int *p1,*p2,*p,a,b;
scanf("%d,%d",&a,&b);
p1=&a;p2=&b;
if(a<b)
{*p=*p1;*p1=*p2;*p2=*p;}
printf("\na=%d,b=%d\n\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}

if(a<b)
{
*p=*p1;
*p1=*p2;
*p2=*p;
}
你是想交换指针所指的值,这里p1 指向了a,p2指向了b,也就是说p1 p2它们都有了值(*p1是a值,*p2是b的值),指针本身也就有了地址.但是指针p没有初值啊(它应该是NULL,不同的编译器会将它赋不同的值),它没有地址.你把一个数值(a)放到一个没有地址的内存块中,程序就会崩溃.咱们学指针的时候不是经常说指针变量要赋初值么!

修改的方法有很多,不知道你是想用地址做为交换变量呢,还是把变量的值做为交换条件,自己再想想想吧,很有意思的.

这里c c++编程经常遇到的问题,也是指针最难掌握的部分.

给你改了一下,问题出在if(a<b)的语句里了
#include<stdio.h>
main()
{
int *p1,*p2,*p,a,b;
scanf("%d",&a);
scanf("%d",&b);
p1=&a;p2=&b;
if(a<b)
{p=p1;
p1=p2;
p2=p;}
printf("\na=%d,b=%d\n\n",a,b);
printf("max=%d,min=%d\n",*p1,*p2);
}

你这用的是C语言吧?以下可以在c++里面可以运行,你的问题是有些变量没有初始化,把下面的*p改为“*p=0”
#include<stdio.h>
void main()
{
int *p1,*p2,*p,a,b; //这里“*p”改为“*p=0”
scanf("%d",&a);
scanf("%d",&b);
p1=&a;p2=&b;
if(a<b)
{*p=*p1;*p1=*p