两段很基础的代码————大家帮俺看看在线等待!!!!
第一段:
#include <stdio.h>
void main()
{
int *p1,*p2,a,b,*t;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if (*p1<*p2)
{
t= p1;
p1=p2;
p2=t;
}
printf("%d,%d\n",*p1,*p2);
}
能够达到降序的效果!!!!!!!!!!!!!!!!!!!!!!!!!!
第二段:
#include <stdio.h>
void main()
{
void chang();
int *p1,*p2,a,b,*t;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
chang(p1,p2);
printf("%d,%d\n",*p1,*p2);
}
void chang(int *pt1,int *pt2)
{
int *t;
if (*pt1<*pt2)
{
t=pt1;
pt1=pt2;
pt2=t;
}
return;
}
不能够达到降序的效果!!!!!!!!!!!!!!!!!!!!!!!!!!
我的问题是:为什么第一段就能达到降序的效果第二段就不能达到呢????
为什么????????????????????????????????????我只要为什么啊 第二种达不到我只想知道这个原因。
问题点数:20、回复次数:18Top
1 楼UniverseWisdom(幻法师)回复于 2005-03-31 21:43:11 得分 0
change中楼主只交换了指针值,没有交换变量值。
应该:
void chang(int *pt1,int *pt2)
{
int t;
if (*pt1<*pt2)
{
t=*pt1;
*pt1=*pt2;
*pt2=t;
}
return;
}Top
2 楼kobefly(科比--网络学习中)回复于 2005-03-31 21:45:23 得分 0
应该交换指针变量的值
不是指针的值
void chang(int *pt1,int *pt2)
{
int t;
if (*pt1<*pt2)
{
t=*pt1;
*pt1=*pt2;
*pt2=t;
}
return;
}Top
3 楼kobefly(科比--网络学习中)回复于 2005-03-31 21:46:35 得分 0
或者这样,用指针的引用
void chang(int *&pt1,int *&pt2)
{
int *t;
if (*pt1<*pt2)
{
t=pt1;
pt1=pt2;
pt2=t;
}
return;
}Top
4 楼txing(天星)回复于 2005-03-31 21:47:19 得分 0
函数调用值调用。
#include <stdio.h>
void main()
{
void chang();
int *p1,*p2,a,b,*t;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
chang(p1,p2);
printf("%d,%d\n",*p1,*p2);
}
void chang(int *pt1,int *pt2)
{
int *t;
if (*pt1<*pt2) //函数调用的时候创建了P1和P2的副本_p1和_p2这里改变的是_p1和_p2的值并没有改变P1和P2的值。如果要用函数调用就应该用指针的指针。
{
t=pt1;
pt1=pt2;
pt2=t;
}
return;
}
Top
5 楼wangchuanbin(飘零)回复于 2005-03-31 21:49:09 得分 0
我第一段程序中不也只是交换了指针的值吗??Top
6 楼losky(理性的人背叛内心,感性的人背叛现实)回复于 2005-03-31 21:52:46 得分 0
改成这样就可以了
#include <stdio.h>
void chang(int *pt1,int *pt2)
{
int t;
if (*pt1<*pt2)
{
t=*pt1;
*pt1=*pt2;
*pt2=t;
}
}
void main()
{
int *p1,*p2,a,b;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
chang(p1,p2);
printf("%d,%d\n",*p1,*p2);
}
Top
7 楼pcboyxhy(-273.15℃)回复于 2005-03-31 21:53:02 得分 0
弄清指针的值
和指针指向的地方存放的值Top
8 楼wangchuanbin(飘零)回复于 2005-03-31 21:55:19 得分 0
我要的不是该过来的结果。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我手上也有该过来的结果!!!!!!!!!!!!!我想知道为什么不懂的不理解的不要回答好吗拜托了暗暗 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11我想弄明白指针做为参数时的原理Top
9 楼kobefly(科比--网络学习中)回复于 2005-03-31 21:59:37 得分 0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
这有什么不好明白的
void chang(int *pt1,int *pt2)
{
int *t;
if (*pt1<*pt2)
{
t=pt1;
pt1=pt2;
pt2=t;
}
return;
}
函数运行之后对pt1跟pt2的值根本没有改变
自然没有效果拉!Top
10 楼pcboyxhy(-273.15℃)回复于 2005-03-31 22:00:50 得分 0
#include <stdio.h>
void main()
{
int *p1,*p2,a,b,*t;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
if (*p1<*p2)
{
t= p1;
p1=p2;
p2=t;
}
printf("%d,%d\n",*p1,*p2);
}
能够达到降序的效果!!!!!!!!!!!!!!!!!!!!!!!!!!
第二段:
#include <stdio.h>
void main()
{
void chang();
int *p1,*p2,a,b,*t;
scanf("%d,%d",&a,&b);
p1=&a;
p2=&b;
chang(p1,p2);
printf("%d,%d\n",*p1,*p2);
}
void chang(int *pt1,int *pt2) // pt1和pt2不过是传过来的指针值,只能改变指针指向的地方的值
{
int *t;
if (*pt1<*pt2)
{
t=pt1; //这里不影响main里面的东西
pt1=pt2;
pt2=t;
}
return;
}
Top
11 楼wangchuanbin(飘零)回复于 2005-03-31 22:02:58 得分 0
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
这有什么不好明白的
void chang(int *pt1,int *pt2)
{
int *t;
if (*pt1<*pt2)
{
t=pt1;
pt1=pt2;
pt2=t;
}
return;
}
函数运行之后对pt1跟pt2里面所指向的地址可变了啊!!!a和b 是和pt1和pt2里面装的地址联系着呢怎么解释Top
12 楼wangchuanbin(飘零)回复于 2005-03-31 22:10:00 得分 0
比如:
pt1 里面装的地址是200021,200021地址内存放的是3。
pt2 里面装的地址是200023,200023地址内存放的是4。
chang()函数的作用就是把pt1 指向200023 ,把pt2 指向 200021。这样对吧!!!?????
因为200021地址内存放的是3 ,所以*pt2应该是3才对啊我是这样理解的请指导!???????????????????????????????????????Top
13 楼wangchuanbin(飘零)回复于 2005-03-31 22:12:42 得分 0
我知道只交换的地址,但那地址里都有东西啊??????????????????????????/Top
14 楼sedge(*-*哪里的天空?永远不阴霾?*-*)回复于 2005-03-31 23:01:38 得分 0
pt1 和 pt2 确实交换了
但 p1 和 p2 确实没交换
Top
15 楼dogdog2005()回复于 2005-03-31 23:17:00 得分 20
后者的值只在void change交换了,交换后的值并没有传递回主函数,它做的只是单向的值传递。
如果你还不明白,建议你看看谭浩强的c语言程序设计,关于函数那章。Top
16 楼cssin(Steven Liu)回复于 2005-04-01 00:26:33 得分 0
我比较认同dogdog2005的看法。
int main() {
......
swap(&i, &j);
......
}
1.
void swap (int a, int b) {
int temp;
temp = a;
a = b;
b = temp;
return;
}
2.
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
return;
}
3.
void swap(int *a, int *b) {
int *temp;
temp = a;
a = b;
b = temp;
return;
}
这三个代码有两个相同的地方
1.都是把i, j的地址Copy给了a, b
2.在调用了swap之后,a, b的值都被销毁了
而不同的一个地方在于:其中代码1,3交换了地址a, b的值,而代码2交换了地址a, b所指向的值。不知道这样解释是否有问题,大家来讨论讨论。Top
17 楼xialin168(林)回复于 2005-04-01 02:15:15 得分 0
楼主是才开始学指针的吧!
还是先把书里的东西学好了再来提一些需要技术的问题!
这个问题算是白痴问题了,
自已还没学好,别人给指点又看不明白,
还大叫不懂的不理解的别来....,是你自已还没弄懂!
楼上的都是正确的解答!
我劝你还是改行算了!Top
18 楼shzwfq(静苑)回复于 2005-04-01 08:28:01 得分 0
“我知道只交换的地址,但那地址里都有东西”
大哥,指针本身也是变量,它本身也是一个值
“pt1 里面装的地址是200021,200021地址内存放的是3。
pt2 里面装的地址是200023,200023地址内存放的是4。“
这句话正确!
chang()函数的作用就是把pt1 指向200023 ,把pt2 指向 200021”
这句话也正确!
但你说pt1,pt2的改变会影响到主函数里实参p1,p2的值吗?
不会!!!!
这样理解由于p1 ,p2本身也是值,又传递参数时是传的他们的值,所以chang()函数里面pt1,pt2只是他们的副本,副本本身值(而不是像你理解的他们所指向的内容的交换)的变化根本与p1 ,p2无关!
Top




