社区
C语言
帖子详情
while(*p++ = *q++ != ‘0’)
yht8708
2011-09-13 09:41:26
(实际='0'并不需要,只是问一下)上面这个式子运算顺序是不是先检测*q是否等于0,然后把*q赋给*p,然后while再检测*p的值是否为0?
在编strcat()时,加上这个=‘0’结果就不正确。
...全文
335
14
打赏
收藏
while(*p++ = *q++ != ‘0’)
(实际='0'并不需要,只是问一下)上面这个式子运算顺序是不是先检测*q是否等于0,然后把*q赋给*p,然后while再检测*p的值是否为0? 在编strcat()时,加上这个=‘0’结果就不正确。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
szqh97
2011-09-14
打赏
举报
回复
[Quote=引用 5 楼 yang122610 的回复:]
0 ,'0' ,'\0',null ,“0”要整清楚哦、、、
[/Quote]
++ 应该是'\0'd
yht8708
2011-09-14
打赏
举报
回复
是的,我是想知道这样的话 是先把*q值赋给*p 然后while再取检查*p的值是否为0是吗
[Quote=引用 7 楼 anyidan 的回复:]
while(*p++ = *q++);
标准库中的用法
[/Quote]
cpprogrammer
2011-09-14
打赏
举报
回复
说实话,千万不要这样用。最好把i++或是++i单独写一行,如果非要在while()中包含自增或是自减,
语句应该尽量简洁。
今天刚好看了《 c primer plus》相关的内容,该书作者也是这样建议的,我也觉得他的建议是正确的,
虽然我的编程经验还很少。
上面举了几个例子,说明了不同编译器对类似语句的解释不同,使用须谨慎!
muku9527
2011-09-14
打赏
举报
回复
[Quote=引用 8 楼 matrixcl 的回复:]
while(*p++ = *q++ != '\0')
等价
while(*p++ = (*q++ != '\0'))
这个肯定不是你想要的。
[/Quote]
支持,建议LZ家个括号
wyfwx
2011-09-14
打赏
举报
回复
[Quote=引用 9 楼 yht8708 的回复:]
是的,我是想知道这样的话 是先把*q值赋给*p 然后while再取检查*p的值是否为0是吗
引用 7 楼 anyidan 的回复:
while(*p++ = *q++);
标准库中的用法
[/Quote]
yes
wyfwx
2011-09-14
打赏
举报
回复
直接用 0x0 也可以
matrixcl
2011-09-13
打赏
举报
回复
while(*p++ = *q++ != '\0')
等价
while(*p++ = (*q++ != '\0'))
这个肯定不是你想要的。
AnYidan
2011-09-13
打赏
举报
回复
while(*p++ = *q++);
标准库中的用法
快乐的小菜鸟
2011-09-13
打赏
举报
回复
他们都说这么多了 菜鸟表示 while的用法还是很吸引人的
动感超哥
2011-09-13
打赏
举报
回复
0 ,'0' ,'\0',null ,“0”要整清楚哦、、、
月光的护城河
2011-09-13
打赏
举报
回复
[Quote=引用 1 楼 lvjing_csdn 的回复:]
=运算符是右结合性,这个式子是先把字符'0'赋值给*q,然后把*q的值赋值给*p,赋值完之后p、q各自加一次。whil循环测试的内容是*p,即'0',测试条件成立。
[/Quote]
不对吧,我觉得楼主说的是对的,“!=”的优先级在这里面最高。。
”在编strcat()时,加上这个=‘0’结果就不正确“
'0'和'\0',不是一回事
luciferisnotsatan
2011-09-13
打赏
举报
回复
[Quote=引用 2 楼 lvjing_csdn 的回复:]
楼主注意'0'和'\0',不是一回事。如果你不加=‘0’,当*q==’\0‘时while测试条件就不成立了,就退出了循环。
[/Quote]
++
代码里,应该是 '\0'吧
lvjing_CSDN
2011-09-13
打赏
举报
回复
楼主注意'0'和'\0',不是一回事。如果你不加=‘0’,当*q==’\0‘时while测试条件就不成立了,就退出了循环。
lvjing_CSDN
2011-09-13
打赏
举报
回复
=运算符是右结合性,这个式子是先把字符'0'赋值给*q,然后把*q的值赋值给*p,赋值完之后p、q各自加一次。whil循环测试的内容是*p,即'0',测试条件成立。
C语言 *p
++
=*q
++
理解
优先级问题 经查表,首先 * 与
++
的优先级是一样的,根据编译原理应当遵守靠右的规则,所以 *p
++
= *(p
++
); i
++
与
++
i的区别 网上已经有很多帖子贴代码测试过了,这里我直接引用...printf("%d",*
++
p); //输出结果为1
*p
++
、(*p)
++
、*(p
++
)
运行程序测验一下:*p
++
与*(p
++
)#include<iostream> using namespace std; int main() { //测试*p
++
int a[5] = {1,100,200,300}; int *p=a; *p
++
= 10; cout << "*p: "...
古怪的C
++
语法*p
++
=*q
++
今天在“待字闺中”看到了一条C
++
语句:*p
++
=*q
++
; 1 分析 (1)*q
++
: 后置自增操作符
++
(优先级为1),优先级要高于解析引用操作符(优先级为2)。 先将q值取出(此时为V1),然后自增(此时为V1+1),最后取出...
C语言指针复制字符串
1 while(*p
++
=*q
++
); 等价于: 1 while((*p
++
=*q
++
)!='\0'); 【详解】 1 *p=*q; 2 char c=*q; 3 p
++
; 4 q
++
; 5 while(c!='\0') 6 { 7 *p=*q; 8 c=*q; 9 p
++
; 10 ...
linux下C编程(四)之*p
++
=*q
++
真的被这个指针弄得差点崩溃了,...*p
++
=*q
++
,这一篇下面的程序会出现错误,因为这样指针p的地址早都变化(*p
++
),这个指针成为野指针了,对于指针q也是如此。 #include int main(int argc,char *argv[]) { int i
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章