赋值非0 C++

来源:百度知道 编辑:UC知道 时间:2024/09/24 00:53:01
#include<iostream>
using namespace std;
void f(char *dest, const char *sec)
{
while(*dest++ = *sec++);
}
int main()
{
char a[20] = "How are you?", b[20];
f(b, a);
cout << b << endl;
return 0;
}

这个程序中while(*dest++ = *sec++); 是什么赋值方法?中间的赋值永远为真么?“\0= \0”又如何?希望大牛帮忙~感激不尽~~~~~~

*dest++ = *sec++ 相当于 先*dest = *sec,再dest++, sec++

表达式的值为进行自增之前的*dest,只要其不是\0,则为真
而当进行\0赋值之后,则为假,循环结束
从而完成整个字符串的复制工作

// 简化的,先使用来赋值,再做自加运算.
// 中间的赋值遇到字符串结束符号,就为假,以退出.
// 当*dest++ = '\0'的时候退出
do{
*dest = *sec; // 首先取值,赋值
if ((*dest)=='\0') break; // 如果赋值为'\0'就退出
dest += 1; sec += 1; // 然后才自加
}while(*(dest-1));

用char 数组表示字符串时,用'\0'标识字符串到达末尾,'\0'在数值上等于0。while中每次检测当前字符是不是'\0',如不是处理之,并指针后移,直到到达'\0'。
“\0=\0"这个字符串会被当成是空串