|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 关于指针交换两个值的问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1949
人关注过本帖
标题:
关于指针交换两个值的问题
只看楼主
加入收藏
育帝
来 自:黑龙江哈尔滨
等 级:
论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
结帖率:
87.5%
楼主
收藏
已结贴
√
问题点数:20 回复次数:10
关于指针交换两个值的问题
#include<stdio.h>
main()
{
int n=2,m=3;
int *p1,*p2,*temp;
p1=&n;
p2=&m;
temp=*p1;
*p1=*p2;
*p2=temp;
printf("%d %d",n,m);
}
为什么n和m可以交换呢?temp=*p1不是把值给指针了吗?请大家解答一下,讲解一下程序运行过程,谢谢 谢谢
谢谢!!!
2016-11-23 21:14
举报帖子
使用道具
赠送鲜花
吹水佬
等 级:
版主
威 望:
451
帖 子:10609
专家分:43210
注 册:2014-5-20
第
2
楼
收藏
得分:0
int temp; 不好吗?
2016-11-23 21:23
举报帖子
使用道具
赠送鲜花
linlulu001
等 级:
贵宾
威 望:
20
帖 子:944
专家分:4047
注 册:2016-4-13
第
3
楼
收藏
得分:5
#include<stdio.h>
main()
{
int n=2,m=3;
int *p1,*p2,*temp;
p1=&n;
p2=&m;
printf("n的地址%p,p1的值%x\n",&n,p1);
printf("m的地址%p,p1的值%x\n",&m,p2);
temp=p1;
p1=p2;
p2=temp;
printf("n的地址%p,p1的值%x\n",&n,p1);
printf("m的地址%p,p1的值%x\n",&m,p2);
}
2016-11-23 21:32
举报帖子
使用道具
赠送鲜花
止步于未来
等 级:
论坛游民
威 望:
1
帖 子:22
专家分:67
注 册:2016-11-24
第
4
楼
收藏
得分:0
你不会以为,a变量赋值给b变量后,a变量的值就没了?这是错的,a赋值给b后,a的值还是原来的(就像复制一样的),并没有被释放,除非在别的情况下a的生命周期到了,就会被释放。
一步一脚的向前
2016-11-24 17:33
举报帖子
使用道具
赠送鲜花
育帝
来 自:黑龙江哈尔滨
等 级:
论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
第
5
楼
收藏
得分:0
回复 2楼 吹水佬
嗯,就是编译 的时候打出来一看还可以运行,就不懂了
育帝
2016-11-24 19:21
举报帖子
使用道具
赠送鲜花
育帝
来 自:黑龙江哈尔滨
等 级:
论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
第
6
楼
收藏
得分:0
回复 4楼 止步于未来
嗯,谢啦,但是回答和我问的不是一个啊
育帝
2016-11-24 19:39
举报帖子
使用道具
赠送鲜花
炎天
来 自:桃花岛
等 级:
贵宾
威 望:
29
帖 子:1218
专家分:4986
注 册:2016-9-15
第
7
楼
收藏
得分:0
忽略
[此贴子已经被作者于2016-11-24 21:40编辑过]
早知做人那么辛苦! 当初不应该下凡
2016-11-24 19:56
举报帖子
使用道具
赠送鲜花
育帝
来 自:黑龙江哈尔滨
等 级:
论坛游民
帖 子:75
专家分:43
注 册:2016-10-16
第
8
楼
收藏
得分:0
回复 7楼 炎天
那不就是把 值 赋值 给指针了吗?指针不是指向地址码?类似temp=&n,*temp=5;新手勿怪
育帝
2016-11-24 21:10
举报帖子
使用道具
赠送鲜花
九转星河
来 自:长长久久
等 级:
贵宾
威 望:
52
帖 子:5023
专家分:14003
注 册:2016-10-22
第
9
楼
收藏
得分:3
int temp 和 int *temp其实在这题来说是等效的,*temp根本没有的*根本没有利用,因为temp并没有指向一个有意义的地址。
p1的地址就是n的地址。*p1就是读取p1地址指向的数据~就是读取&n指向的数据~
三楼已经解释得很清楚了~
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-24 22:45
举报帖子
使用道具
赠送鲜花
止步于未来
等 级:
论坛游民
威 望:
1
帖 子:22
专家分:67
注 册:2016-11-24
第
10
楼
收藏
得分:3
回复 6楼 育帝
好吧,我猜到你的疑问了
这个: temp=*p1;
*p1=*p2;
*p2=temp;
*p1 ,*p2 代表的是:指针变量p1 / p2所指向变量的值,所以此时交换的是m,n的值而并不是地址。
int temp;
//这点的temp不是指针变量,如果是,那下一行的赋值就是错误的。
temp= p1;
p1= p2;
p2= temp;
这样的话,就是交换了地址,而并没有交换m,n的值。
一步一脚的向前
2016-11-25 13:00
举报帖子
使用道具
赠送鲜花
11
1/2页
1
2
快速回复:
关于指针交换两个值的问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.029900 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved