| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1372 人关注过本帖
标题:传值传址问题?
只看楼主 加入收藏
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用永夜的极光在2007-11-2 10:20:06的发言:
{ temp=name[i];name[i]=name[k];name[k]=temp;}
等价于
{
temp=*(name+i);
*(name+i)=*(name+k);
*(name+k)=temp;
}

跟3楼帮你改正的程序一摸一样吧

这个和我写的那个本质上是一样的,只是形式不同而已,name[i],*(name+i)两者等价;

[此贴子已经被作者于2007-11-5 13:34:41编辑过]

2007-11-03 00:29
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
回复:(万兽无缰)指针和数组没区别???!!!!
感觉实质上没区别,不都是指向一个地址嘛,只是指向地址的大小不一样啊
2007-11-03 00:30
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 

麻烦各位帮忙详细解释下,还是不懂

2007-11-03 13:09
学c
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-17
收藏
得分:0 

我给你解释一下,第一个问题,就像静思说的那样,p1,和p2只是局部变量,虽然实现了指针指向的改变,但是只是实现了局部指针变量指向的改变,实参指针的指向并没有变。所以输出并不会变,像这样:
int *p;
*p=*p1;
*p1=*p2;
*p2=*p;就改变了变量在内存中的存储(交换),就实现了交换。
第二个问题:这是一个二级指针,怎么和第一个一样呢?不要告诉我你不懂二级指针啊!!!第二题中的temp=name[i];name[i]=name[k];name[k]=temp就相当于第一题中的int *p;*p=*p1;*p1=*p2;*p2=*p;因为是二级指针,这点要仔细考虑,可以动手划一下图。所以第二题实现了指针变量的交换。

2007-11-03 15:40
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用学c在2007-11-3 15:40:54的发言:

我给你解释一下,第一个问题,就像静思说的那样,p1,和p2只是局部变量,虽然实现了指针指向的改变,但是只是实现了局部指针变量指向的改变,实参指针的指向并没有变。所以输出并不会变,像这样:
int *p;
*p=*p1; /*这步有问题哦,p中还没有确定的地址值呢,它的值是不可预见的,如果内存空间的空闲空间少的话,会破坏系统正常运行*/
*p1=*p2;
*p2=*p;就改变了变量在内存中的存储(交换),就实现了交换。
第二个问题:这是一个二级指针,怎么和第一个一样呢?不要告诉我你不懂二级指针啊!!!第二题中的temp=name[i];name[i]=name[k];name[k]=temp就相当于第一题中的int *p;*p=*p1;*p1=*p2;*p2=*p;因为是二级指针,这点要仔细考虑,可以动手划一下图。所以第二题实现了指针变量的交换。

有点思路!

2007-11-03 23:13
huawang99
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2007-1-28
收藏
得分:0 
七楼的是正解!!!

2007-11-04 14:44
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 
以下是引用huawang99在2007-11-4 14:44:39的发言:
七楼的是正解!!!

char *temp;
{ temp=name[i];
name[i]=name[k];
name[k]=temp;}
}
这个是对的,谭浩强课本上就这样写的

2007-11-05 12:28
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
对于你的第二个问题,void sort(char *name[],int n)这个函数的第一个形参是数组名,name数组当中的元素是指针。
这个函数当中temp=name[i];name[i]=name[k];name[k]=temp;这三条语句相当于交换下标为i、k数组元素的值,使得最后字符串有序。当函数返回时,主函数就得到了改变后的数组

英者自知,雄者自胜
2007-11-05 13:02
lee198409
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-10-15
收藏
得分:0 
数组和指针有区别的,c专家编程里面说的很清楚的
2007-11-05 15:04
sunpy
Rank: 1
来 自:厦门
等 级:新手上路
帖 子:118
专家分:0
注 册:2007-10-1
收藏
得分:0 
回复:(lee198409)数组和指针有区别的,c专家编程里...
请问你有C专家编程的电子版吗?能不能送我一份?谢谢!
liufei.19871014@gmail.com

荀子《劝学》:“不积跬步,无以至千里;不积小流,无以成江海.”
2007-11-05 22:55
快速回复:传值传址问题?
数据加载中...
 
   



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

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