我一直在玩一些代码,看到了一些我不理解的"为什么".
int i = 6;
int j;
int *ptr = &i;
int *ptr1 = &j
j = i++;
//now j == 6 and i == 7. Straightforward.
如果你把算符放在等号的左边呢?
++ptr = ptr1;
相当于
(ptr = ptr + 1) = ptr1;
鉴于
ptr++ = ptr1;
相当于
ptr = ptr + 1 = ptr1;
后缀运行了一个编译错误,我明白了.赋值运算符左侧有一个常数"ptr+1".很公平.
前缀一个编译并在C++中工作.是的,我知道它很混乱,而且你正在处理未分配的内存,但它可以工作并编译.在C语言中,它不编译,返回与后缀"赋值的左操作数需要左值"相同的错误.无论它是如何编写的,用两个"="运算符或"++ptr"语法展开,都会发生这种情况.
C处理这种赋值的方式和C++处理它的方式有什么不同?