| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 764 人关注过本帖
标题:郁闷很久的一个指针问题
只看楼主 加入收藏
liebermich
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-9-12
收藏
 问题点数:0 回复次数:11 
郁闷很久的一个指针问题
#include <stdio.h>

main() {
int a,b;
int point_1,point_2;
scanf("%d%d",&a,&b);
point_1 = &a;
point_2 = &b;
printf("%d,%d\n",a,b);
compositor(point_1,point_2);
printf("%d,%d",a,b);
}

compositor(int *p1,int *p2) {
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
以上程序可以交换point_1,point_2所指的东西,为什么不把compositor改成
compositor(int *p1,int *p2) {
int temp;
temp = p1;
p1 = p2;
p2 = temp;
}
就不行呢?其实也是交换了point_1,point_2的地址啊!
搜索更多相关主题的帖子: 指针 
2006-09-13 01:46
wwjazz
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-8-24
收藏
得分:0 

地址是不可以赋值给变量的


2006-09-13 02:29
waynebeat
Rank: 1
等 级:新手上路
帖 子:111
专家分:0
注 册:2006-8-26
收藏
得分:0 
形参不能改变实参的地址

只剩一年了………… 够了!
2006-09-13 10:57
paopao
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-9-1
收藏
得分:0 

地址与变量之间不能相互赋值了,必须是同一类型才可以相互赋值的。

2006-09-13 11:42
raoming
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2006-9-13
收藏
得分:0 

定义这个函数时:compositor(int *p1,int *p2) 同时也定义了参数类型:p1,p2是指针。

所以以后运用p1,p2都是指指针,就不用再加*这个符号了

要是加了*这个符号,就代表是一个指针上的值,即:*P1,*p2是指针上的值。


{

int temp;

temp = p1; (p1应用时是个指针,而temp是个值,二者不可以相等,而*p1在
应用时指的是指针上的值,不再是指针了)

p1 = p2;

p2 = temp;

}

2006-09-13 11:58
yuchujin
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-25
收藏
得分:0 
你定义的时候就打错了 应该是:
main() {
int a,b;
int *point_1,*point_2;

这样就把POINT 1和2 定义为指针变量。

这样两个point_1,point_2就可以存放变量在内存里的地址了



其实你的问题在C语言书上就指出来了

你如果子程序里指针变量不加*号的话 其实就是两个变量互换“地址的值”而且 而没有换地址指向的内容

........晕 这个BBS不能贴图.......... G-G-G-G-G-G-G-UNIT
2006-09-13 20:20
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分:0 
如过temp是个地址,结果有会如何????

由于工作,N久都没来了!
2006-09-13 20:24
yuchujin
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-7-25
收藏
得分:0 
也没怎么样 还是交换不了

原来带*的子程序的含义: 把两个各自指向两个变量的地址变量互换 其实就是把他们的地址对应的内容互换

没有带*的:把两个地址变量的“地址值”交换一下 没有启到指向的内容互换的作用

........晕 这个BBS不能贴图.......... G-G-G-G-G-G-G-UNIT
2006-09-13 20:31
zhufeifei
Rank: 1
等 级:新手上路
威 望:2
帖 子:402
专家分:0
注 册:2006-8-11
收藏
得分:0 

#include <stdio.h>
main() {
int a,b;
int *point_1,*point_2;
scanf("%d%d",&a,&b);
point_1 = &a;
point_2 = &b;
printf("%d,%d\n",a,b);
compositor(*point_1,*point_2);
printf("%d,%d",a,b);
}

compositor(int *p1,int *p2) {
int temp;
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
以上程序可以交换point_1,point_2所指的东西,为什么不把compositor改成
compositor(int *p1,int *p2) {

int temp;

temp = p1;

p1 = p2;

p2 = temp;

}显然,P1,P2是指针变量,里面存的是地址,而temp是整形变量,把地址赋给整型变量,肯定不行喽!


在不断的拼搏与进取中,定能创造一片天地!
2006-09-24 13:07
tang123
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2006-9-22
收藏
得分:0 
同意啊
这上对的
2006-09-24 14:12
快速回复:郁闷很久的一个指针问题
数据加载中...
 
   



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

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