免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7021 | 回复: 22
打印 上一主题 下一主题

指针问题!对于你们太简单了,但是我不懂 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-02 19:53 |只看该作者 |倒序浏览
#include <iostream>
using namespace std;
void swap(int &a,int &b);
main()
{
        int a=3,b=4;
        cout<<"1a="<<&a<<"b="<<&b<<endl;
        swap(a,b);
        cout<<"3a="<<a<<"b="<<b<<endl;

        return 0;
}
void   swap(int  &a,int &b)
{
a=a+1;
b=b+1;
        cout<<"2a="<<a<<"b="<<b<<endl;

}
在swap函数里a和b已经+1了,就是说a和b已经指向了别的地方了,但是为什么最后输出的时候为什么不是一个随机的值呢?

论坛徽章:
0
2 [报告]
发表于 2009-07-02 19:56 |只看该作者
引用,引用!
C++ 害死人。
看看,多生动的例子啊。

论坛徽章:
0
3 [报告]
发表于 2009-07-02 20:04 |只看该作者
什么意思不懂啊 可否详细点说明

论坛徽章:
0
4 [报告]
发表于 2009-07-02 20:07 |只看该作者
#include <iostream>
using namespace std;
void swap(int *a,int *b);
main()
{
        int a=3,b=4;
        cout<<"1a="<<&a<<"b="<<&b<<endl;
        swap(&a,&b);
        cout<<"3a="<<a<<"b="<<b<<endl;

        return 0;
}
void   swap(int  *a,int *b)
{
a=a+1;
b=b+1;
        cout<<"2a="<<a<<"b="<<b<<endl;

}用指针也不行啊,在swap函数内部a,b指向了别处了,但是最后求值怎么还是3,4

论坛徽章:
0
5 [报告]
发表于 2009-07-02 20:14 |只看该作者
星号,星号,对指针进行解引用方能得到原来的对象。

void
swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}

论坛徽章:
0
6 [报告]
发表于 2009-07-02 20:17 |只看该作者
传进去的参数,只是指针的一个复制品,复制品的改变并不影响原来的值,所以无效。
C 语言是按值传参的,直到 C++ 才出现引用。

论坛徽章:
0
7 [报告]
发表于 2009-07-02 20:17 |只看该作者
这题如果有悬赏就好了

论坛徽章:
0
8 [报告]
发表于 2009-07-02 20:37 |只看该作者
我不是想要他们的值呼唤,我只是想知道我在函数体内改变了输入函数的指向,但是为什么在主函数里边返回的还是3,4
如果全是地址那么结果是这个
1 a=0012FF7C b=0012FF78
2 a=0012FF24 b=0012FF28--->swap a,b都指向了别的地方
3 a=0012FF7C b=0012FF78--->有回到了a,b原来的地址了
Press any key to continue 为什么最后没有指向a=0012FF24 b=0012FF28这个地址????

论坛徽章:
0
9 [报告]
发表于 2009-07-02 20:50 |只看该作者

回复 #6 langue 的帖子

还是不太懂

论坛徽章:
0
10 [报告]
发表于 2009-07-02 21:45 |只看该作者
我明白了,其实传进来的a,和b的地址是重新分配的地址,他们的地址和main()函数中的地址不一样,但是他们指向的都是同一个地址,只是他们各自的存储地址不一样,所以在swap里改变了a,b自己所在的地址,但是他们的指向还是不变的,所以取他们的值,还是3,4,然后函数结束他们销毁
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP