这个c语言题目要怎么写呢

2.输入两个整数,并使其从大到小输出,用函数实现数的交换(1)源程序:#include<stdio.h>voidswap(int*p1,int*p2){intp;p=*p... 2. 输入两个整数,并使其从大到小输出,用函数实现数的交换
(1)源程序:
#include <stdio.h>
void swap(int *p1, int *p2)
{ int p;
p=*p1;
*p1=*p2;
*p2=p;
}
void main()
{ int a,b;
int *p,*q;
scanf("%d,%d",&a,&b);
p=&a; q=&b;
if(a<b) swap(p,q);
printf("\n%d,%d\n",a,b);
}
(2)输入数据:
(3)结果输出:
(4)如果将swap 函数修改为如下形式,分析如何调试和修改?
void swap(int *p1, int *p2)
{ int *p;
*p=*p1;
*p1=*p2;
*p2=*p;
}
不会改呀,求高手来改
展开
 我来答
匿名用户
2014-03-24
展开全部

int *p;申明了一个指针变量p,要使用*p,必须让p指向一个内存单元,否则,p就是野指针你有两种方法。


void swap(int *p1, int *p2)
{
    int x;//自动变量x属于栈
    int *p=&x;  
    *p=*p1; 
    *p1=*p2;
    *p2=*p;
}
这种方法纯属蛋疼。

2.堆

void swap(int *p1, int *p2)
{
    int *p=(int*)malloc(sizeof(int));  //堆
    *p=*p1; 
    *p1=*p2;
    *p2=*p;
    free(p);
}

 使用完p后,记得释放p指向的内存,某些情况下还需将p指向NULL,防止悬挂指针。

free(p);

p=NULL;

风华怜馨
2014-03-24 · TA获得超过679个赞
知道小有建树答主
回答量:210
采纳率:100%
帮助的人:93万
展开全部
有点没明白你的要求。
要实现数的交换,你的swap 函数是没有问题的,问题出在调用的时候:

void main()
{
int a, b;
//int *p, *q;
scanf("%d,%d", &a, &b);
//p = &a; q = &b;
if (a<b) swap(&a, &b);
printf("\n%d,%d\n", a, b);
}
swap 函数的参数应该为你要交换的变量的地址。如果你设一个中间变量,那修改的只是中间变量,
即也可以修改为:
void main()
{
int a, b;
int *p, *q;
scanf("%d,%d", &a, &b);
p = &a; q = &b;
if (a<b) swap(p, q);
printf("\n%d,%d\n", *p, *q);
}

望采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
第四片叶子521
2014-03-24 · TA获得超过435个赞
知道小有建树答主
回答量:154
采纳率:100%
帮助的人:47.7万
展开全部
首先你的指针必需指向一个地址,才有意义,你的函数中int *p根本没有指向一个地址,你给它东西他往哪存。所以你可以给p分配一个地址,于是:
int *p = (int *)malloc(sizeof(int))
*p=p1;
*p1=*p2;
*p2=*p1;
free(p); //不这样也会销毁。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式