2 u013319244 u013319244 于 2016.04.21 20:04 提问

一个简单的 #define i++ 问题
 #include <stdio.h>
#define product(x) (x*x)
int main()
{
    int i=3,j,k;
    j = product(i++);
    k = product(++i);
    printf("j=%d,k=%d",j,k);
    return 0;
}

为啥答案是 12,49? GCC环境

12个回答

CSDNXIAON
CSDNXIAON   2016.04.21 20:12

I love sneakers!(最少分配一个问题)
[Java] 一个关于i++ 的问题
How do I define preprocessor macros in the xcode project settings
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

qq_34745908
qq_34745908   2016.04.21 20:10

因为一个是先运算再执行,一个是先执行在运算

u013319244
u013319244 先++ 后++ 这个我知道 但是 product里的两个参数 为啥不一样呢? 还有前面的product为啥中间 i还 ++了一次
一年多之前 回复
u013319244
u013319244   2016.04.21 20:14

顺着答案的思路 逆向推导一下 首先 j = product(i=3(i++ now i=4) ,i=4(i++ now i=5);
j=12(3x4);
i++;//(now i=6)
i++;//(now i=7)
k = product (i,i);//7x7
k=49;//

qq_34328833
qq_34328833   2016.04.21 21:09

这主要是学会区别前置++,后置++和define定义的宏如何传参的问题
前置++是先加加再使用,后置++是先使用再加加
j=product(i++)(i++ * i++),这条语句是后置++,i先使用再加加,实际应该是j=product(3)(3*4)=12,应为第二个i++执行完后i=4,第三个后置加加是先使用再
加加所以最后应该是j=3*4=12.
但是注意的是这条语句执行完成后i=5
k=product(++i)(++i * ++i),这条语句是前置加加,先加加再使用,实际传参应该是k=product(6)(7*7)=49

qq_34328833
qq_34328833 我不是故意的!昨天网不行。
一年多之前 回复
u013319244
u013319244 兄弟没必要刷屏吧 哈哈 不过还是谢谢你
一年多之前 回复
qq_34328833
qq_34328833   2016.04.21 21:08

这主要是学会区别前置++,后置++和define定义的宏如何传参的问题
前置++是先加加再使用,后置++是先使用再加加
j=product(i++)(i++ * i++),这条语句是后置++,i先使用再加加,实际应该是j=product(3)(3*4)=12,应为第二个i++执行完后i=4,第三个后置加加是先使用再
加加所以最后应该是j=3*4=12.
但是注意的是这条语句执行完成后i=5
k=product(++i)(++i * ++i),这条语句是前置加加,先加加再使用,实际传参应该是k=product(6)(7*7)=49

qq_34328833
qq_34328833   2016.04.21 21:08

这主要是学会区别前置++,后置++和define定义的宏如何传参的问题
前置++是先加加再使用,后置++是先使用再加加
j=product(i++)(i++ * i++),这条语句是后置++,i先使用再加加,实际应该是j=product(3)(3*4)=12,应为第二个i++执行完后i=4,第三个后置加加是先使用再
加加所以最后应该是j=3*4=12.
但是注意的是这条语句执行完成后i=5
k=product(++i)(++i * ++i),这条语句是前置加加,先加加再使用,实际传参应该是k=product(6)(7*7)=49

qq_34328833
qq_34328833   2016.04.21 21:09

这主要是学会区别前置++,后置++和define定义的宏如何传参的问题
前置++是先加加再使用,后置++是先使用再加加
j=product(i++)(i++ * i++),这条语句是后置++,i先使用再加加,实际应该是j=product(3)(3*4)=12,应为第二个i++执行完后i=4,第三个后置加加是先使用再
加加所以最后应该是j=3*4=12.
但是注意的是这条语句执行完成后i=5
k=product(++i)(++i * ++i),这条语句是前置加加,先加加再使用,实际传参应该是k=product(6)(7*7)=49

qq_34328833
qq_34328833   2016.04.21 21:09

这主要是学会区别前置++,后置++和define定义的宏如何传参的问题
前置++是先加加再使用,后置++是先使用再加加
j=product(i++)(i++ * i++),这条语句是后置++,i先使用再加加,实际应该是j=product(3)(3*4)=12,应为第二个i++执行完后i=4,第三个后置加加是先使用再
加加所以最后应该是j=3*4=12.
但是注意的是这条语句执行完成后i=5
k=product(++i)(++i * ++i),这条语句是前置加加,先加加再使用,实际传参应该是k=product(6)(7*7)=49

qq_34328833
qq_34328833   2016.04.21 21:09

这主要是学会区别前置++,后置++和define定义的宏如何传参的问题
前置++是先加加再使用,后置++是先使用再加加
j=product(i++)(i++ * i++),这条语句是后置++,i先使用再加加,实际应该是j=product(3)(3*4)=12,应为第二个i++执行完后i=4,第三个后置加加是先使用再
加加所以最后应该是j=3*4=12.
但是注意的是这条语句执行完成后i=5
k=product(++i)(++i * ++i),这条语句是前置加加,先加加再使用,实际传参应该是k=product(6)(7*7)=49

qq_34328833
qq_34328833   2016.04.21 21:10

这主要是学会区别前置++,后置++和define定义的宏如何传参的问题
前置++是先加加再使用,后置++是先使用再加加
j=product(i++)(i++ * i++),这条语句是后置++,i先使用再加加,实际应该是j=product(3)(3*4)=12,应为第二个i++执行完后i=4,第三个后置加加是先使用再
加加所以最后应该是j=3*4=12.
但是注意的是这条语句执行完成后i=5
k=product(++i)(++i * ++i),这条语句是前置加加,先加加再使用,实际传参应该是k=product(6)(7*7)=49

共12条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!