鱼C论坛

 找回密码
 立即注册
查看: 1375|回复: 4

[已解决]c++里pow函数中的后置递增++失灵

[复制链接]
发表于 2021-7-13 11:01:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

各位前辈好。
我想请问下
c++
int a = 1
pow(a++,2)的结果与pow(a,2)的结果一样,都是1.
既没有如同pow(++a,2)的结果:先(1+1)再^2
也没有先1^2再加1
为什么?
最佳答案
2021-7-13 12:09:28

不是自增的++失效,而是a++和++a作为参数时,参数是传值的,a++是先将自己的值传给函数pow然后自增函数接收的参数值为1,而++a是先自增再传值,函数接收的参数值为2。结果当然不一样。在C/C++中函数的参数一般是传值,除非你用引用或者指针的方式进行传入。
屏幕截图(104).png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-13 11:29:39 | 显示全部楼层
$ cat main.cpp
#include <iostream>
#include <cmath>

int main() {
    {
        int a = 1;
        double d = pow(a++, 2);
        std::cout << d << std::endl;
    }
    {
        int a = 2;
        double d = pow(a++, 2);
        std::cout << d << std::endl;
    }
    return 0;
}
$ g++ -g -Wall -o main main.cpp
$ ./main
1
4
$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-13 12:09:28 | 显示全部楼层    本楼为最佳答案   

不是自增的++失效,而是a++和++a作为参数时,参数是传值的,a++是先将自己的值传给函数pow然后自增函数接收的参数值为1,而++a是先自增再传值,函数接收的参数值为2。结果当然不一样。在C/C++中函数的参数一般是传值,除非你用引用或者指针的方式进行传入。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-13 12:09:55 | 显示全部楼层

你好。我的答案与你的一致。但可能误会了我的问题。我想问的是为什么是1和4,而不是2和5。++后置递增不是要+1吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-7-13 12:13:23 | 显示全部楼层
元武 发表于 2021-7-13 12:09
你好。我的答案与你的一致。但可能误会了我的问题。我想问的是为什么是1和4,而不是2和5。++后置递增不是 ...

后 ++,先使用值,然后再加
a++是先将自己的值传给函数pow,然后自增,函数接收的参数值为1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 18:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表