我宁愿通过展示代码来做到这一点。
如果这个帖子已经有答案的话,可以随意把它复制(因为我还没有找到)。
这是我的密码:
#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;
}输出:
1 2 3 999 5问题是,我说的是test++,这意味着测试将增加到4,对吗?但是为什么将999插入索引3而不是4
据我所知,test应该在分配给arr的999之前增加。这段代码有什么解释吗?(这不一样吗?因为当我认为它应该是不同的时候,它就会产生同样的结果)
*(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。
如果我说话的方式太混乱,我很抱歉,如果你认为我的解释中遗漏了什么,我希望通过这篇文章,其他也感到困惑的人可以理解。
发布于 2020-06-07 17:54:57
预增量运算符: -增量前运算符(
++i)用于在表达式中使用变量之前增加变量的值。在预增量中,值首先递增,然后在表达式中使用.
增量后运算符:-增量后运算符( i++ )用于在完全执行表达式后增加变量的值,在表达式中使用后增量。在后增量中,值首先用于表达式,然后递增。
因此,在您的示例中,test++将首先返回值,即3,然后它将增加。因此,arr[test++]会转到索引3,而不是4。如果您会这样做- arr[++test] = 999,那么首先测试的值会增加到值4,然后在语句中使用它作为索引。这是增量后和增量前的主要区别。
希望这能消除你的疑虑!
发布于 2020-06-07 18:05:57
我不能重现结果
1 2 3 4 999 5我在运行你的程序
1 2 3 999 5我想你的问题有错处。
至于这个问题
问题是,我说test++,这意味着测试将增加到4,对吗?但是为什么999被插入到索引3而不是4呢?
然后根据C标准(6.5.2.4后缀增量和递减操作符)
2后缀++操作符的结果是操作数的值。副作用是,操作数对象的值增加(也就是说,适当类型的值1被添加到它中)。
所以你可以考虑这样的说法
*(arr+(test++))=999喜欢
*(arr+(test))=999
++test;发布于 2020-06-07 17:57:25
是什么让你困惑。结果是:123995使用gcc。
https://stackoverflow.com/questions/62249420
复制相似问题