【发布时间】:2010-12-22 07:48:39
【问题描述】:
好吧,我并不是真的需要这个答案,我只是好奇。
像*ptr++ = a 这样的表达式是完全有效的,因为我们在两个对象上操作ptr 和*ptr 但是如果我写*ptr++ = *ptr + a 它仍然有效吗?
例如考虑以下 sn-p:
int main(void){
int a[] = {5,7,8,9,2};
int* p =a;
*p++ = 76; /*altering the first element */
*p++ = *p + 32; /*altering the second element */
p = a;
int i;
for(i = 0;i<5; i++)
printf("%d ",*p++);
return 0;
}
我认为表达式*p++ = *p + 32; 没什么好担心的,但我不确定所涉及的序列点。
【问题讨论】:
-
为什么不 *p++ += 32; ?实际上,这对我来说有点奇怪。 :-)
-
没有 p 的声明,它非常重要。
-
@MSalters:人们会假设 OP 出于某种原因定义了“a”。并且有一个分配'p = a'。所以这意味着 p 是一个 int。 (否则这个问题无论如何都没那么有趣)。
-
@Debanjan:是的,有很多事情要担心。 :-)
标签: c++ c sequence-points