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的大小
展开
 我来答
shine1991
科技发烧友

2020-01-28 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部

#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;

}

听不清啊
高粉答主

2020-01-28 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.8亿
展开全部

#include<stdio.h>

void exe(int *p,int *q);

 main()

{


int *p,*q,a,b;


scanf("%d %d",&a,&b);

printf("a=%d,b=%d\n",a,b);

p = &a;

q = &b;

if(a<b)

{

exe(p,q);

}

printf("max=%d,min=%d\n",*p,*q);


void exe(int*p,int*q)

{

int t; 

t=*p; 

*p=*q; 

*q=t; 

}

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
最大的宝宝
2020-01-28 · TA获得超过828个赞
知道小有建树答主
回答量:1569
采纳率:67%
帮助的人:387万
展开全部
在函数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;
}
追问

指针p的值不就是变量a的地址吗
改变p的值不能让p指向b吗

比如这个? 好蒙

追答
你原来的问题现在有两个回答,如果测试一下,你会发现它们都得到了你需要的结果。不同之处在于,一个是交换了变量a和b本身的值,一个是交换了两个指针的指向。这两个方式都很有用,只不过我给出的回答可能比较好理解而已。
在调用函数时,参数首先会压入到堆栈,这就是我说的拷贝,即堆栈上的那个参数其实是一个副本。这里的知识你搜索一下,看图理解会简单一些。
现在说说现在你给的/代码,这里没有使用函数,自然不会出现拷贝带来的副作用。而你最后这种写法,和另外一个答主的思路是一样的,只不过他的写法在复杂代码中显得更实用。他使用**直接将指针变量本身,而不是指针变量的拷贝传递到函数中来,所以得到了正确的结果。
所以呢,你还需要理解函数调用过程中,是如何处理参数的。以及引用符&的作用。遇到不明白的,一是多上机,学会调试功能,二是多看些经典书籍,这都需要下功夫去积累的。我们以前学c语言还要同时学汇编,才能更好的理解c语言,没学过就只能多问多看多上机了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式