当前位置: 代码迷 >> C语言 >> 请告诉我这个程序里存在的问题好吗
  详细解决方案

请告诉我这个程序里存在的问题好吗

热度:193   发布时间:2005-12-14 01:01:00.0
请告诉我这个程序里存在的问题好吗

#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  

----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
以下是引用303770957在2005-12-14 1:15:00的发言:

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

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


----------------解决方案--------------------------------------------------------
仔细在仔细的看看书,我相信你就会懂得!!
c语言不懂指针的话,很麻烦的!
----------------解决方案--------------------------------------------------------
int swap;
swap=*pa;swap 为整形,pa 为指针,怎么可以swap=p呢?
----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
以下是引用wenyong在2005-12-14 8:57:00的发言:
int swap;
swap=*pa;swap 为整形,pa 为指针,怎么可以swap=p呢?

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


----------------解决方案--------------------------------------------------------
在倒数第三行我要达到*pa=*pb;的效果写pa=pb为什么不可以呢。
主要回答这句话!
楼上的,如果写成PA=PB
那么swap就应该是个指针吧
----------------解决方案--------------------------------------------------------

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


----------------解决方案--------------------------------------------------------
以下是引用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的地址交换,所以这样调用后还是没有起到值交换的作用


----------------解决方案--------------------------------------------------------
  相关解决方案