怎么理解这行代码
如何理解这行代码?
已知*s1,*s2是两个字符串的指针,现在我知道:
for ( ; (*s1=*s2) ! = '\0' ; s1++, s2++)
;
这两行代码的作用很好理解,可是
for ( ; (*s1=*s2) ; s1++, s2++)
;
作用却和上述代码一样,这我就有点不明白了,下面的代码有终止条件吗?
------解决思路----------------------
for ( ; (*s1=*s2) ; s1++, s2++)的循环结束条件就是当*s1不为真时结束循环;
这里先将*s2赋值给*s1,然后判断*s1是否为真
而'\0'的ASCII码值为0,在C++中非0即为真;因此当*s1的值为'\0'时即不为真,结束循环
综上这两段代码效果是一样的,只不过第一段代码直观好理解,第二段代码简洁但有点绕
------解决思路----------------------
一样的。(*s1 = *s2)该表达式是先将s2指向的字符复制给s1,然后返回*s1的值,*s1为'\0'就结束循环,有点像
void *p = 0;if(p == 0) 相当于if(!p),两者是等价的
------解决思路----------------------
第二个会把赋值表达式(*s1=*s2)的返回值*s1转换为bool类型: 可能是隐式转换(比如整形),可能是用类型转换运算符operator bool()
第一个很明确。
------解决思路----------------------
‘\0'的ASCII码值是0,当遇到字符串s2结尾时(*s1=*s2)返回’\0‘,也就是返回0,0就C中代表的就是假,在C++编译器会解析为是false
已知*s1,*s2是两个字符串的指针,现在我知道:
for ( ; (*s1=*s2) ! = '\0' ; s1++, s2++)
;
这两行代码的作用很好理解,可是
for ( ; (*s1=*s2) ; s1++, s2++)
;
作用却和上述代码一样,这我就有点不明白了,下面的代码有终止条件吗?
------解决思路----------------------
for ( ; (*s1=*s2) ; s1++, s2++)的循环结束条件就是当*s1不为真时结束循环;
这里先将*s2赋值给*s1,然后判断*s1是否为真
而'\0'的ASCII码值为0,在C++中非0即为真;因此当*s1的值为'\0'时即不为真,结束循环
综上这两段代码效果是一样的,只不过第一段代码直观好理解,第二段代码简洁但有点绕
------解决思路----------------------
一样的。(*s1 = *s2)该表达式是先将s2指向的字符复制给s1,然后返回*s1的值,*s1为'\0'就结束循环,有点像
void *p = 0;if(p == 0) 相当于if(!p),两者是等价的
------解决思路----------------------
第二个会把赋值表达式(*s1=*s2)的返回值*s1转换为bool类型: 可能是隐式转换(比如整形),可能是用类型转换运算符operator bool()
第一个很明确。
------解决思路----------------------
‘\0'的ASCII码值是0,当遇到字符串s2结尾时(*s1=*s2)返回’\0‘,也就是返回0,0就C中代表的就是假,在C++编译器会解析为是false