| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1370 人关注过本帖
标题:传值传址问题?
取消只看楼主 加入收藏
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
结帖率:83.33%
收藏
 问题点数:0 回复次数:6 
传值传址问题?

1.swap(int *p1,int *p2)
{ int *p;
p=p1;
p1=p2;
p2=p
; 不行;不能企图通过改变形参指针变量的值来改变实参,而要通过改变实参变量指针指向的值;
}
main()
{ int a,b;
int *pointer1,*pointer2;
scanf("%d,%d",&a,&b);
pointer1=&a;
pointer2=&b;
if(a<b) swap(pointer1,pointer2);
printf("\n%d,%d\n",*pointer1,*pointer2);
}

2.#include<string.h>
main()
{
void sort(char *name[],int n);
void print(char *name[],int n);
char *name[]={"follow me","basic","great wall","format","computer designe"};
int n=5;
sort(name,n);
print(name,n);
}
void sort(char *name[],int n)
{ char *temp;
int i,j,k;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if(strcmp(name[k],name[j])>0)k=j;
if(k!=j)
{ temp=name[i];name[i]=name[k];name[k]=temp;}
}
}
void print(char *name[], int n )
{int i;
for(i=0;i<n;i++)
printf("%s\n",name[i]);
}
第一个不行,为什么第二个行呀?两者实质感觉一样啊!只是前者只有一个数字,而后者是一个数组形式,
只是存储单元大小不一呀

搜索更多相关主题的帖子: int 传址 传值 变量 
2007-11-01 20:26
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 

但后面的数组为什么可以呀?
两者本质上感觉没区别呢

2007-11-02 08:33
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
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
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
快速回复:传值传址问题?
数据加载中...
 
   



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

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