Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 增量前/增量后指针_C - Fatal编程技术网

C 增量前/增量后指针

C 增量前/增量后指针,c,C,这两种表达方式有区别吗 (*x)++ 及 我可以看到这两条语句都替换了*x中(*x+1)的内容。但是他们之间有什么区别吗 一个是“pre”,另一个是“post”。这就是区别。一个在增量之前进行评估(第一个选项),另一个在增量之后进行评估(第二个选项)。一个在使用前(pre)对存储在x中的值进行增量,而另一个在使用后(post)进行增量 还要注意的是,+(*x)与(*x+1)不同。第一个增加值并存储回去,另一个只是增加值。让我们假设x所指的值是10 i:e(*x是10) 上述语句将作为执行 1.

这两种表达方式有区别吗

(*x)++


我可以看到这两条语句都替换了*x中(*x+1)的内容。但是他们之间有什么区别吗

一个是“pre”,另一个是“post”。这就是区别。一个在增量之前进行评估(第一个选项),另一个在增量之后进行评估(第二个选项)。

一个在使用前(pre)对存储在
x
中的值进行增量,而另一个在使用后(post)进行增量


还要注意的是,
+(*x)
(*x+1)
不同。第一个增加值并存储回去,另一个只是增加值。

让我们假设x所指的值是10 i:e(*x是10)

上述语句将作为
执行 1.y=*x
2. *x=*x+1
所以y=10&*x是11

y = ++(*x);
上述语句将作为
执行 1. *x=*x+1
2.y=*x
因此y=11&*x是11

(*x)+
计算为
*x
的值;作为副作用,
*x
中的值将增加1

y = ++(*x);
+(*x)
计算为
*x
+1的值;作为副作用,
*x
中的值将增加1

假设代码:

int a = 5;
int *x = &a;
(*x)+
将计算为
5
,而
+(*x)
将计算为6

注意,在计算表达式后,不必立即应用副作用;它只需要在下一个序列点之前应用


还请注意,括号对于
(*x)++
很重要;后缀
++
的优先级高于一元
*
,因此
*x++
将被解析为
*(x++)
;它的计算结果仍然是
*x
,但作为一种副作用,它会使指针前进,而不是增加所指向的对象。前缀
++
和一元
*
具有相同的优先级,因此它们从左到右应用;因此,
+(*x)
+*x
将产生相同的结果(
*x
递增,而不是
x

将它们与printf一起使用..可能重复的@dirkgently-error-duplicate(尽管我猜这个问题的某个地方也有一个真正的重复)。@mikefisher啊,在这种情况下是的,它是相同的。感谢您提到括号的重要性..:)
int a = 5;
int *x = &a;