s***h 发帖数: 662 | 1 我在处理一个char array c[], 想把它从某个位置开始,向左移一个字符,这样原来那
个字符就被删掉了。
比如说,c[100], 从51到100向左移一个字符,那么50就被overwrite
假定已经有指针指向c[51], 称为p,实际这个操作等于
while (*p)
{
*p = *(p+1);
p++;
}
这个让我不由会想到
while (*p)
*p = *(++p);
这个不是看起来比刚才那个好看多了吗?不过这样++在执行的时候,也把左边给先改掉
了。所以就突然想弄清楚赋值的时候左右两边的表达式求值的顺序。有哪位给解说一下? | S**I 发帖数: 15689 | 2 it's undefined behavior
【在 s***h 的大作中提到】 : 我在处理一个char array c[], 想把它从某个位置开始,向左移一个字符,这样原来那 : 个字符就被删掉了。 : 比如说,c[100], 从51到100向左移一个字符,那么50就被overwrite : 假定已经有指针指向c[51], 称为p,实际这个操作等于 : while (*p) : { : *p = *(p+1); : p++; : } : 这个让我不由会想到
| i*****e 发帖数: 63 | 3 *p = *(p++) 应该可以吧
赋值一般是先算右边吧,你这个是++p 和 p++的区别 | s***h 发帖数: 662 | 4
对,这个应该是正解。我刚查了一下The C Programming Language. 里面特意提到了这
个情况。
s[i] = i++;
它的例子和我刚才所提到的是一样的。看来还是基本功不够扎实啊。classic book还是
得多读。:-)
【在 S**I 的大作中提到】 : it's undefined behavior
|
|