| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 520 人关注过本帖
标题:来帮菜鸟指导一下指针和函数调用问题
只看楼主 加入收藏
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
结帖率:94.12%
收藏
已结贴  问题点数:20 回复次数:11 
来帮菜鸟指导一下指针和函数调用问题
程序代码:
#include<stdio.h>
void main()
{
    void exchange(int *q1,int *q2,int *q3);   //函数声明
    int a,b,c,*p1,*p2,*p3;
    printf("请输入三个数字:");
    scanf("%d,%d,%d",&a,&b,&c);
    p1=&a,p2=&b,p3=&c;
    exchange(p1,p2,p3);
    printf("由小到大为:");
}
void exchange(int *q1,int *q2,int *q3)      //定义将3个变量的值交换的函数
{                                          
    void swap(int *pt1,int *pt2);            //函数声明                           
    if(*q1<*q2)swap(q1,q2);                  /如果a<b,交换a和b的值
    if(*q1<*q3)swap(q1,q3);                 //如果b<c,交换b和c的值
    if(*q2<*q3)swap(q1,q3);                 //如果a<c,交换a和c的值
}
void swap(int *pt1,int *pt2)                //定义交换2个变量的值的函数
{                                           
    int temp;                               //换*pt1和*pt2变量的值
    temp=*pt1;
    *pt1=*pt2;
    *pt2=temp;
}
这是书上一个例题,输入三个整数a,b,c,要求由大到小的顺序将他们输出。用函数实现。
我的疑问:
   if(*q1<*q2)swap(q1,q2);                  
    if(*q1<*q3)swap(q1,q3);                     
     if(*q2<*q3)swap(q2,q3);                 
为什么不是:
if(*q1<*q2)swap(*q1,*q2);                  
    if(*q1<*q3)swap(*q1,*q3);                     
     if(*q2<*q3)swap(*q2,*q3);
两者有什么区别?
麻烦高手解答一下,本人大一,自学到指针,有点不理解。



[ 本帖最后由 wwfdzh2012 于 2012-11-23 12:05 编辑 ]
搜索更多相关主题的帖子: color 
2012-11-22 23:35
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
没人吗,可能太晚了吧。。。
2012-11-22 23:43
lovexlt
Rank: 1
等 级:新手上路
帖 子:2
专家分:7
注 册:2007-6-13
收藏
得分:2 
不加*是内存地址,,加*是内存地址中的内容。,在调用函数中,如果对换是数值等于没换,因为函数调用完,会释放掉临时内存,所以要有内存地址值去索引对换。新手之见。表达不清楚望见谅,
2012-11-23 00:43
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 3楼 lovexlt
谢谢你的回答,我再想一下、。。
2012-11-23 11:57
木头人不是人
Rank: 2
等 级:论坛游民
帖 子:8
专家分:19
注 册:2012-11-4
收藏
得分:8 
if(*q1<*q2)swap(*q1,*q2);                  
  
传递的是地址,指针存放的就是地址,所以做参数的时候不加&, 比较的时候加* 是取这个地址的值,相当于 ,*p 相当于 使用a原值
2012-11-23 12:04
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 5楼 木头人不是人
问题是程序不能这样写,编译会出现错误,还有这个*p应该是一个数值吧?
2012-11-23 12:10
麦麸
Rank: 2
等 级:论坛游民
帖 子:22
专家分:24
注 册:2012-11-14
收藏
得分:0 
回复 6楼 wwfdzh2012
肯定不能那样写!
你定义的map()形参是指针类型,所以map(q1,q2).
2012-11-23 12:41
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 5楼 木头人不是人
不好意思,我看错了,你这样一说我就有点理解了,但是我还想问,在用嵌套函数的时候,比如
程序代码:
void exchange(int *q1,int *q2,int *q3)      //定义将3个变量的值交换的函数
{                                         
    void swap(int *pt1,int *pt2);            //函数声明                          
    if(*q1<*q2)swap(q1,q2);                  /如果a<b,交换a和b的值
    if(*q1<*q3)swap(q1,q3);                 //如果b<c,交换b和c的值
    if(*q2<*q3)swap(q1,q3);                 //如果a<c,交换a和c的值
}
里的pt1,pt2是实参还是形参?q1,12呢?
2012-11-23 12:44
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
回复 7楼 麦麸
好像有点理解了。。。
2012-11-23 12:46
wwfdzh2012
Rank: 2
等 级:论坛游民
帖 子:88
专家分:27
注 册:2012-11-22
收藏
得分:0 
....
2012-11-23 16:30
快速回复:来帮菜鸟指导一下指针和函数调用问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019514 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved