| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1022 人关注过本帖
标题:请告诉我这个程序里存在的问题好吗
只看楼主 加入收藏
haiduc
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2005-11-30
收藏
 问题点数:0 回复次数:18 
请告诉我这个程序里存在的问题好吗

#include <stdio.h>
#include <conio.h>
int swap(int *pa,int *pb);
int main(void){

int a,b;
scanf("%d,%d",&a,&b);
printf("%d%10d\n",a,b);
swap(&a,&b);
printf("%d%10d\n",a,b);
getch();

}

int swap(int *pa,int *pb){
int swap;
swap=*pa;
*pa=*pb;
*pb=swap;
}

记得老师以前讲一个和这个相似的问题时说什么没有定义指针长度,请问上面的这个程序是不是没问题了,以后在写这类程序应该注意些什么问题呢。
还有个问题,在倒数第三行我要达到*pa=*pb;的效果写pa=pb为什么不可以呢。
请高手指教,谢谢。

搜索更多相关主题的帖子: 倒数 include 
2005-12-14 01:01
303770957
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:838
专家分:2125
注 册:2005-9-10
收藏
得分:0 

请注意:
*pa=*pb是将指针pb所指的数赋给pa;
pa=pb是将指针pb的地址赋给pa。


♂ 死后定当长眠,生前何须久睡。♀
2005-12-14 01:15
haiduc
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2005-11-30
收藏
得分:0 
以下是引用303770957在2005-12-14 1:15:00的发言:

请注意:
*pa=*pb是将指针pb所指的数赋给pa;
pa=pb是将指针pb的地址赋给pa。

真费解啊,不过有点明白了,谢谢


2005-12-14 01:20
xinlingwuyu
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2005-12-7
收藏
得分:0 
仔细在仔细的看看书,我相信你就会懂得!!
c语言不懂指针的话,很麻烦的!
2005-12-14 08:31
wenyong
Rank: 1
等 级:新手上路
帖 子:251
专家分:0
注 册:2005-8-9
收藏
得分:0 
int swap;
swap=*pa;swap 为整形,pa 为指针,怎么可以swap=p呢?

2005-12-14 08:57
haiduc
Rank: 1
等 级:新手上路
帖 子:45
专家分:0
注 册:2005-11-30
收藏
得分:0 

谢谢各位兄弟,俺差不多明白了


2005-12-14 10:53
沉默的羔羊1013
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2005-12-10
收藏
得分:0 
以下是引用wenyong在2005-12-14 8:57:00的发言:
int swap;
swap=*pa;swap 为整形,pa 为指针,怎么可以swap=p呢?

你说的啥意思?pa是指针,*pa就代表pa指向的整形变量阿,当然可以赋给swap了。。。

2005-12-14 18:54
wenyong
Rank: 1
等 级:新手上路
帖 子:251
专家分:0
注 册:2005-8-9
收藏
得分:0 
在倒数第三行我要达到*pa=*pb;的效果写pa=pb为什么不可以呢。
主要回答这句话!
楼上的,如果写成PA=PB
那么swap就应该是个指针吧

2005-12-15 09:00
沉默的羔羊1013
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2005-12-10
收藏
得分:0 

1.你要是改成pa=pb的话,就是把pb的地址赋给pa,swap=*pa;*pa=*pb;那麽接着这句*pb=swap;是把原pa指向的值赋给pb,但注意此时pa和pb的地址是相同的(都是原pa的值),所以返回的a,b值不就相同了吗?就达不到交换的目的了。。。

2005-12-15 11:24
沉默的羔羊1013
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2005-12-10
收藏
得分:0 
以下是引用wenyong在2005-12-15 9:00:00的发言:
楼上的,如果写成PA=PB
那么swap就应该是个指针吧

但即使改成这样也是不对的
#include <stdio.h>
#include <conio.h>
int swap(int *pa,int *pb);
int main(void){

int a,b;
scanf("%d,%d",&a,&b);
printf("%d%10d\n",a,b);
swap(&a,&b);
printf("%d%10d\n",a,b);
getch();

}

int swap(int *pa,int *pb){

int *swap;
swap=pa;
pa=pb;
pb=swap;
}
因为函数调用时,参数的传递是值传递,调用swap时,只是将a,b的地址传给了pa,pb,虽然在函数内部,pa,pb的值做了交换,但并没有使a,b的地址交换,所以这样调用后还是没有起到值交换的作用

2005-12-15 11:29
快速回复:请告诉我这个程序里存在的问题好吗
数据加载中...
 
   



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

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