忘记密码   免费注册 查看新帖 | 论坛精华区
ChinaUnix.net
  平台论坛 博客 微博 读书 人才 精华 文库 自测 | 频道操作系统 开发 数据库 存储 服务器 网络 IT新闻 Linux 下载 Power用户组
最近访问板块 发新帖
查看: 4901 | 回复: 23

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

帖子
112
主题
43
精华
0
可用积分
171
专家积分
0
在线时间
27 小时
注册时间
2009-03-03
最后登录
2009-10-03
论坛徽章:
0
发表于 2009-07-02 19:53:11 |显示全部楼层
#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已经指向了别的地方了,但是为什么最后输出的时候为什么不是一个随机的值呢?

Rank: 8Rank: 8

帖子
17029
主题
75
精华
0
可用积分
62600
专家积分
110
在线时间
2842 小时
注册时间
2006-09-07
最后登录
2011-11-30
论坛徽章:
0
发表于 2009-07-02 19:56:25 |显示全部楼层
引用,引用!
C++ 害死人。
看看,多生动的例子啊。
The PDP-7, introduced in 1965, featured the 18b product line's first mass storage operating system (DECsys, based on DECtapes). It was also the development system for the first versions of UNIX.

帖子
112
主题
43
精华
0
可用积分
171
专家积分
0
在线时间
27 小时
注册时间
2009-03-03
最后登录
2009-10-03
论坛徽章:
0
发表于 2009-07-02 20:04:53 |显示全部楼层
什么意思不懂啊 可否详细点说明

帖子
112
主题
43
精华
0
可用积分
171
专家积分
0
在线时间
27 小时
注册时间
2009-03-03
最后登录
2009-10-03
论坛徽章:
0
发表于 2009-07-02 20:07:42 |显示全部楼层
#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

Rank: 8Rank: 8

帖子
17029
主题
75
精华
0
可用积分
62600
专家积分
110
在线时间
2842 小时
注册时间
2006-09-07
最后登录
2011-11-30
论坛徽章:
0
发表于 2009-07-02 20:14:49 |显示全部楼层
星号,星号,对指针进行解引用方能得到原来的对象。

void
swap(int *a, int *b)
{
    int tmp = *a;
    *a = *b;
    *b = tmp;
}
The PDP-7, introduced in 1965, featured the 18b product line's first mass storage operating system (DECsys, based on DECtapes). It was also the development system for the first versions of UNIX.

Rank: 8Rank: 8

帖子
17029
主题
75
精华
0
可用积分
62600
专家积分
110
在线时间
2842 小时
注册时间
2006-09-07
最后登录
2011-11-30
论坛徽章:
0
发表于 2009-07-02 20:17:04 |显示全部楼层
传进去的参数,只是指针的一个复制品,复制品的改变并不影响原来的值,所以无效。
C 语言是按值传参的,直到 C++ 才出现引用。
The PDP-7, introduced in 1965, featured the 18b product line's first mass storage operating system (DECsys, based on DECtapes). It was also the development system for the first versions of UNIX.

Rank: 8Rank: 8

帖子
17029
主题
75
精华
0
可用积分
62600
专家积分
110
在线时间
2842 小时
注册时间
2006-09-07
最后登录
2011-11-30
论坛徽章:
0
发表于 2009-07-02 20:17:30 |显示全部楼层
这题如果有悬赏就好了
The PDP-7, introduced in 1965, featured the 18b product line's first mass storage operating system (DECsys, based on DECtapes). It was also the development system for the first versions of UNIX.

帖子
112
主题
43
精华
0
可用积分
171
专家积分
0
在线时间
27 小时
注册时间
2009-03-03
最后登录
2009-10-03
论坛徽章:
0
发表于 2009-07-02 20:37:56 |显示全部楼层
我不是想要他们的值呼唤,我只是想知道我在函数体内改变了输入函数的指向,但是为什么在主函数里边返回的还是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这个地址????

帖子
5510
主题
452
精华
1
可用积分
28
专家积分
7
在线时间
628 小时
注册时间
2008-11-02
最后登录
2011-11-17
论坛徽章:
0
发表于 2009-07-02 20:50:30 |显示全部楼层

回复 #6 langue 的帖子

还是不太懂
一直在努力,一直在进步!!

帖子
112
主题
43
精华
0
可用积分
171
专家积分
0
在线时间
27 小时
注册时间
2009-03-03
最后登录
2009-10-03
论坛徽章:
0
发表于 2009-07-02 21:45:35 |显示全部楼层
我明白了,其实传进来的a,和b的地址是重新分配的地址,他们的地址和main()函数中的地址不一样,但是他们指向的都是同一个地址,只是他们各自的存储地址不一样,所以在swap里改变了a,b自己所在的地址,但是他们的指向还是不变的,所以取他们的值,还是3,4,然后函数结束他们销毁
您需要登录后才可以回帖 登录 | 注册

北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP