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

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
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
int *p;
*p=*p1;
*p1=*p2;
*p2=*p;

改成这样,要修改的是指针指向的值,不是修改指针本身

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-01 21:16
otacon
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-28
收藏
得分:0 
int *p;
p=p1;
p1=p2;
p2=p
;
这是在交换几个地址 没有动a,b的值

想完成交换的应改成
int p;
p=*p1;
*p1=*p2;
*p2=p;

When people run in circles!It is a very very mad world!
2007-11-01 21:19
yqiong
Rank: 1
等 级:新手上路
帖 子:315
专家分:0
注 册:2007-7-4
收藏
得分:0 

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

2007-11-02 08:33
万兽无缰
Rank: 1
等 级:新手上路
威 望:1
帖 子:296
专家分:0
注 册:2007-8-27
收藏
得分:0 
指针和数组没区别???!!!!

女朋友问我想怎么死~~~
             我说我想"爽死"
2007-11-02 08:36
随心
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:12
帖 子:2577
专家分:250
注 册:2007-8-12
收藏
得分:0 

数组名就是一个指向数组第一个元素的指针,
可以对这个指针做下标操作来访问数组元素。


天之道,利而不害。圣人之道,为而不争。信言不美,美言不信。善者不辩,辩者不善。知者不博,博者不知。
2007-11-02 10:02
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
{ temp=name[i];name[i]=name[k];name[k]=temp;}
等价于
{
temp=*(name+i);
*(name+i)=*(name+k);
*(name+k)=temp;
}

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

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-11-02 10:20
tml327
Rank: 1
等 级:新手上路
帖 子:510
专家分:0
注 册:2007-10-30
收藏
得分:0 

程序变动很小一个字符就可能会千差万别呀!顶一下!


轻狂如我,心伤谁知!
2007-11-02 12:36
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
“不能企图通过改变形参指针变量的值来改变实参”这句话我的理解是因为形参是被调函数的局部变量,形参指针拷贝了实参指针的值,在函数调用完成后,这些局部变量所占的空间被自动释放了,而实参指针的值没有发生任何改变。

英者自知,雄者自胜
2007-11-02 12:52
ondy
Rank: 1
等 级:新手上路
威 望:1
帖 子:88
专家分:0
注 册:2007-9-4
收藏
得分:0 
*p 和 p是不一样的

2007-11-02 17:14
快速回复:传值传址问题?
数据加载中...
 
   



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

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