Redian新闻
>
热烈庆祝本版荣升第一,每人给我发个包子
avatar
热烈庆祝本版荣升第一,每人给我发个包子# PDA - 掌中宝
s*h
1
我在处理一个char array c[], 想把它从某个位置开始,向左移一个字符,这样原来那
个字符就被删掉了。
比如说,c[100], 从51到100向左移一个字符,那么50就被overwrite
假定已经有指针指向c[51], 称为p,实际这个操作等于
while (*p)
{
*p = *(p+1);
p++;
}
这个让我不由会想到
while (*p)
*p = *(++p);
这个不是看起来比刚才那个好看多了吗?不过这样++在执行的时候,也把左边给先改掉
了。所以就突然想弄清楚赋值的时候左右两边的表达式求值的顺序。有哪位给解说一下?
avatar
T*E
2
chi
avatar
S*I
3
it's undefined behavior

【在 s***h 的大作中提到】
: 我在处理一个char array c[], 想把它从某个位置开始,向左移一个字符,这样原来那
: 个字符就被删掉了。
: 比如说,c[100], 从51到100向左移一个字符,那么50就被overwrite
: 假定已经有指针指向c[51], 称为p,实际这个操作等于
: while (*p)
: {
: *p = *(p+1);
: p++;
: }
: 这个让我不由会想到

avatar
C*s
4
pai

【在 T**E 的大作中提到】
: chi
avatar
i*e
5
*p = *(p++) 应该可以吧
赋值一般是先算右边吧,你这个是++p 和 p++的区别
avatar
k*e
6


【在 T**E 的大作中提到】
: chi
avatar
s*h
7

对,这个应该是正解。我刚查了一下The C Programming Language. 里面特意提到了这
个情况。
s[i] = i++;
它的例子和我刚才所提到的是一样的。看来还是基本功不够扎实啊。classic book还是
得多读。:-)

【在 S**I 的大作中提到】
: it's undefined behavior
avatar
l*r
8
居然还有收包子贴?
avatar
J*o
9


【在 l*****r 的大作中提到】
: 居然还有收包子贴?
avatar
l*g
10
揍!!这里的人比股版聪明多了
avatar
T*E
11
re
avatar
c*h
12
我要包子

★ 发自iPhone App: ChineseWeb 7.7

【在 T**E 的大作中提到】
: chi
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。