这个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;
}
不会改呀,求高手来改 展开
(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;
}
不会改呀,求高手来改 展开
3个回答
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;
展开全部
有点没明白你的要求。
要实现数的交换,你的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);
}
望采纳。
要实现数的交换,你的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);
}
望采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先你的指针必需指向一个地址,才有意义,你的函数中int *p根本没有指向一个地址,你给它东西他往哪存。所以你可以给p分配一个地址,于是:
int *p = (int *)malloc(sizeof(int))
*p=p1;
*p1=*p2;
*p2=*p1;
free(p); //不这样也会销毁。
int *p = (int *)malloc(sizeof(int))
*p=p1;
*p1=*p2;
*p2=*p1;
free(p); //不这样也会销毁。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询