各位专家帮我看看书上这里是不是写错了?

80后学编程 2020-03-22 06:48:11
写得内容是要用swap对调,但显示出来,没有对调呢?
我怎么看不懂了呢?
...全文
1075 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiangqing 2020-03-26
  • 打赏
  • 举报
回复
应该是没有检查,书上有误
ggglivw 2020-03-24
  • 打赏
  • 举报
回复
引用 8 楼 weixin_40290083 的回复:
[quote=引用 7 楼 ggglivw 的回复:]
[quote=引用 6 楼 weixin_40290083 的回复:]
[quote=引用 5 楼 Ljnoit 的回复:]
书上没有错。
书上把错误的例子给出来了。
正确的是:

void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}




void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}[/quote]

你错了,你楼上对的,你会编译错误[/quote]

[/quote]

你的swap1有BUG,编译器都给你警告了,输出也看出来的。你把指针地址赋给变量交换,相当于执行了空函数
千梦一生 2020-03-24
  • 打赏
  • 举报
回复
先进的引用传递,说实话,一直不大会用这。主要始终感觉有点难以理解。虽然学研了很久,也知道那玩意儿是个语法糖,老感觉没吃透它,也因此基本上没用过引用传参。不大会用
ggglivw 2020-03-24
  • 打赏
  • 举报
回复
引用 6 楼 weixin_40290083 的回复:
[quote=引用 5 楼 Ljnoit 的回复:]
书上没有错。
书上把错误的例子给出来了。
正确的是:

void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}




void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}[/quote]

我是说你这层楼的回答是错的
ggglivw 2020-03-24
  • 打赏
  • 举报
回复
我是说你6楼的代码是错的。5楼是对的。你把指针直接赋给变量,不报错才怪
ggglivw 2020-03-24
  • 打赏
  • 举报
回复
引用 11 楼 weixin_40290083 的回复:
[quote=引用 9 楼 ggglivw 的回复:]
[quote=引用 8 楼 weixin_40290083 的回复:]
[quote=引用 7 楼 ggglivw 的回复:]
[quote=引用 6 楼 weixin_40290083 的回复:]
[quote=引用 5 楼 Ljnoit 的回复:]
书上没有错。
书上把错误的例子给出来了。
正确的是:

void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}




void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}[/quote]

你错了,你楼上对的,你会编译错误[/quote]

[/quote]

[/quote]


[/quote]


有啥问题?? 引用传递,又不是指针传递.
weixin_40290083 2020-03-24
  • 打赏
  • 举报
回复
引用 9 楼 ggglivw 的回复:
[quote=引用 8 楼 weixin_40290083 的回复:] [quote=引用 7 楼 ggglivw 的回复:] [quote=引用 6 楼 weixin_40290083 的回复:] [quote=引用 5 楼 Ljnoit 的回复:] 书上没有错。 书上把错误的例子给出来了。 正确的是:

void swap(int &x,int &y) {
    int t=x;
    x=y;
    y=t;
}
void swap(int &x,int &y) { int t=*x; *x=*y; *y=t; }[/quote] 你错了,你楼上对的,你会编译错误[/quote] [/quote] [/quote]
80后学编程 2020-03-24
  • 打赏
  • 举报
回复
谢谢大家。
太感谢了。
ggglivw 2020-03-24
  • 打赏
  • 举报
回复

你的代码和你的回答不一样
引用 6 楼 weixin_40290083 的回复:
[quote=引用 5 楼 Ljnoit 的回复:]
书上没有错。
书上把错误的例子给出来了。
正确的是:

void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}




void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}[/quote]
dv_zheng 2020-03-24
  • 打赏
  • 举报
回复
感谢分享!!
donwmufromdying 2020-03-24
  • 打赏
  • 举报
回复
书上写错了。你实际应该在swap函数里入参传地址
weixin_40290083 2020-03-24
  • 打赏
  • 举报
回复
引用 21 楼 ggglivw 的回复:
还有,你用红色标记那个,我是完全照着你6楼回答写的。是swap里面写错了,而不是外面调用错误,接口是传递的引用,但是里面你把传入的引用理解成了指针。 我感觉你把引用和指针弄混淆了。
第一次的代码的确是有问题,在函数的头部有错误,正确的应该是swap(int * x, int * y)而不是swap(int &x, int &y) 后来的帖图中的代码swap1其实是交换的是两人变量的地址,而C函数形参与实参都是值传递,所以并不能交换main函数中两个变量的值,swap2交换的时两个指针所指向内存空间的值,而指针所指向的地址值是没有改变的。
ggglivw 2020-03-24
  • 打赏
  • 举报
回复
还有,你用红色标记那个,我是完全照着你6楼回答写的。是swap里面写错了,而不是外面调用错误,接口是传递的引用,但是里面你把传入的引用理解成了指针。 我感觉你把引用和指针弄混淆了。
ggglivw 2020-03-24
  • 打赏
  • 举报
回复
func(int& x); 这个是引用,func(a);
func(int *p); 这个才是取地址func(&a); 你错了,5楼是对的.
ggglivw 2020-03-24
  • 打赏
  • 举报
回复
引用 18 楼 weixin_40290083 的回复:
[quote=引用 12 楼 ggglivw 的回复:]
[quote=引用 11 楼 weixin_40290083 的回复:]
[quote=引用 9 楼 ggglivw 的回复:]
[quote=引用 8 楼 weixin_40290083 的回复:]
[quote=引用 7 楼 ggglivw 的回复:]
[quote=引用 6 楼 weixin_40290083 的回复:]
[quote=引用 5 楼 Ljnoit 的回复:]
书上没有错。
书上把错误的例子给出来了。
正确的是:

void swap(int &x,int &y) {
int t=x;
x=y;
y=t;
}




void swap(int &x,int &y) {
int t=*x;
*x=*y;
*y=t;
}[/quote]

你错了,你楼上对的,你会编译错误[/quote]

[/quote]

[/quote]


[/quote]


有啥问题?? 引用传递,又不是指针传递.[/quote]


不知道你用的是哪个编译器,我的编译器的定义函数是写成swap(int &x, int &y)会报错误。
OS:ubuntu 编译器gcc5.4.0 开发环境:eclipse platform[/quote]

我只是给你举例子,你的写法是错误的。随便啥编译器,你在6楼的回答是错误的,仅此而已.
weixin_40290083 2020-03-24
  • 打赏
  • 举报
回复
引用 12 楼 ggglivw 的回复:
[quote=引用 11 楼 weixin_40290083 的回复:] [quote=引用 9 楼 ggglivw 的回复:] [quote=引用 8 楼 weixin_40290083 的回复:] [quote=引用 7 楼 ggglivw 的回复:] [quote=引用 6 楼 weixin_40290083 的回复:] [quote=引用 5 楼 Ljnoit 的回复:] 书上没有错。 书上把错误的例子给出来了。 正确的是:

void swap(int &x,int &y) {
    int t=x;
    x=y;
    y=t;
}
void swap(int &x,int &y) { int t=*x; *x=*y; *y=t; }[/quote] 你错了,你楼上对的,你会编译错误[/quote] [/quote] [/quote] [/quote] 有啥问题?? 引用传递,又不是指针传递.[/quote] 不知道你用的是哪个编译器,我的编译器的定义函数是写成swap(int &x, int &y)会报错误。 OS:ubuntu 编译器gcc5.4.0 开发环境:eclipse platform
weixin_40290083 2020-03-24
  • 打赏
  • 举报
回复
swap1本来就是错误的呀。最早我给出的是swap2的代码,说我的是错误的,我还以为自己真的错了,就测试了下,用两个比较了下结果。
liups 2020-03-23
  • 打赏
  • 举报
回复
书上没有讲错。接着往下看就明白了
ggglivw 2020-03-23
  • 打赏
  • 举报
回复
看书不仔细
weixin_40290083 2020-03-23
  • 打赏
  • 举报
回复
引用 7 楼 ggglivw 的回复:
[quote=引用 6 楼 weixin_40290083 的回复:] [quote=引用 5 楼 Ljnoit 的回复:] 书上没有错。 书上把错误的例子给出来了。 正确的是:

void swap(int &x,int &y) {
    int t=x;
    x=y;
    y=t;
}
void swap(int &x,int &y) { int t=*x; *x=*y; *y=t; }[/quote] 你错了,你楼上对的,你会编译错误[/quote]
加载更多回复(5)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧