首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >后增长为指数混淆

后增长为指数混淆
EN

Stack Overflow用户
提问于 2020-06-07 17:51:25
回答 3查看 352关注 0票数 1

我宁愿通过展示代码来做到这一点。

如果这个帖子已经有答案的话,可以随意把它复制(因为我还没有找到)。

这是我的密码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main ()
{
    int test=3;
    int *arr=(int*)malloc (5*sizeof (int));
    for (int x=0; x<5; x++) *(arr+x)=x+1;
    *(arr+(test++))=999;
    for (int x=0; x<5; x++) printf ("%d ", *(arr+x));

    return 0;
}

输出:

代码语言:javascript
复制
1 2 3 999 5

问题是,我说的是test++,这意味着测试将增加到4,对吗?但是为什么将999插入索引3而不是4

据我所知,test应该在分配给arr999之前增加。这段代码有什么解释吗?(这不一样吗?因为当我认为它应该是不同的时候,它就会产生同样的结果)

代码语言:javascript
复制
*(arr+(test++))=999;
*(arr+test)=999; test++;

/*
Or,
arr[test++]=999;        //999 goes to [3] instead of [4]
arr[test]=999; test++;  //The right syntax should be like this right?
*/

顺便说一句,增量前的工作原理就像我做arr[++test]=999一样,999将被分配给索引4。

如果我说话的方式太混乱,我很抱歉,如果你认为我的解释中遗漏了什么,我希望通过这篇文章,其他也感到困惑的人可以理解。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-07 17:54:57

预增量运算符: -增量前运算符( ++i )用于在表达式中使用变量之前增加变量的值。在预增量中,值首先递增,然后在表达式中使用.

增量后运算符:-增量后运算符( i++ )用于在完全执行表达式后增加变量的值,在表达式中使用后增量。在后增量中,值首先用于表达式,然后递增。

因此,在您的示例中,test++将首先返回值,即3,然后它将增加。因此,arr[test++]会转到索引3,而不是4。如果您会这样做- arr[++test] = 999,那么首先测试的值会增加到值4,然后在语句中使用它作为索引。这是增量后和增量前的主要区别。

希望这能消除你的疑虑!

票数 0
EN

Stack Overflow用户

发布于 2020-06-07 18:05:57

我不能重现结果

代码语言:javascript
复制
1 2 3 4 999 5

我在运行你的程序

代码语言:javascript
复制
1 2 3 999 5

我想你的问题有错处。

至于这个问题

问题是,我说test++,这意味着测试将增加到4,对吗?但是为什么999被插入到索引3而不是4呢?

然后根据C标准(6.5.2.4后缀增量和递减操作符)

2后缀++操作符的结果是操作数的值。副作用是,操作数对象的值增加(也就是说,适当类型的值1被添加到它中)。

所以你可以考虑这样的说法

代码语言:javascript
复制
*(arr+(test++))=999

喜欢

代码语言:javascript
复制
*(arr+(test))=999
++test;
票数 1
EN

Stack Overflow用户

发布于 2020-06-07 17:57:25

是什么让你困惑。结果是:123995使用gcc。

https://godbolt.org/z/fgm5Xg

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62249420

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档