c语言 指针作为函数变量怎么用?
#include<stdio.h>voidexe(int*p,int*q);voidmain(){int*p,*q,a,b;scanf("%d%d",&a,&b);p=&...
#include<stdio.h>
void exe(int *p,int *q);
void main()
{
int *p,*q,a,b;
scanf("%d %d",&a,&b);
p = &a;
q = &b;
if(a<b)
{
exe(p,q);
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p,*q);
}
void exe(int*p,int*q)
{
int *t;
t=p;
p=q;
q=t;
}
简单的用指针做函数变量比较两个数大小
问题出在那个函数体 不能交换地址吗?
如何不改变ab的值 比较出ab的大小 展开
void exe(int *p,int *q);
void main()
{
int *p,*q,a,b;
scanf("%d %d",&a,&b);
p = &a;
q = &b;
if(a<b)
{
exe(p,q);
}
printf("a=%d,b=%d\n",a,b);
printf("max=%d,min=%d\n",*p,*q);
}
void exe(int*p,int*q)
{
int *t;
t=p;
p=q;
q=t;
}
简单的用指针做函数变量比较两个数大小
问题出在那个函数体 不能交换地址吗?
如何不改变ab的值 比较出ab的大小 展开
3个回答
展开全部
在函数exe中,应该用指针来改变它指向的值,而不单纯改变指针的值。因为这个指针只是一个拷贝,改变它的值毫无意义
void exe(int *p, int *q);
int main()
{
int *p, *q, a, b;
scanf("%d%d", &a, &b);
p = &a;
q = &b;
if (a < b)
{
printf("a=%d,b=%d\n", a, b);
exe(p, q);
printf("max=%d,min=%d\n", *p, *q);
}
return 0;
}
void exe(int* p, int* q)
{
int t;
t = *p;
*p = *q;
*q = t;
}
void exe(int *p, int *q);
int main()
{
int *p, *q, a, b;
scanf("%d%d", &a, &b);
p = &a;
q = &b;
if (a < b)
{
printf("a=%d,b=%d\n", a, b);
exe(p, q);
printf("max=%d,min=%d\n", *p, *q);
}
return 0;
}
void exe(int* p, int* q)
{
int t;
t = *p;
*p = *q;
*q = t;
}
追答
你原来的问题现在有两个回答,如果测试一下,你会发现它们都得到了你需要的结果。不同之处在于,一个是交换了变量a和b本身的值,一个是交换了两个指针的指向。这两个方式都很有用,只不过我给出的回答可能比较好理解而已。
在调用函数时,参数首先会压入到堆栈,这就是我说的拷贝,即堆栈上的那个参数其实是一个副本。这里的知识你搜索一下,看图理解会简单一些。
现在说说现在你给的/代码,这里没有使用函数,自然不会出现拷贝带来的副作用。而你最后这种写法,和另外一个答主的思路是一样的,只不过他的写法在复杂代码中显得更实用。他使用**直接将指针变量本身,而不是指针变量的拷贝传递到函数中来,所以得到了正确的结果。
所以呢,你还需要理解函数调用过程中,是如何处理参数的。以及引用符&的作用。遇到不明白的,一是多上机,学会调试功能,二是多看些经典书籍,这都需要下功夫去积累的。我们以前学c语言还要同时学汇编,才能更好的理解c语言,没学过就只能多问多看多上机了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询