看到一段代码其中有这么一句:
while((*str2++=*str1++) != '\0');
str1是指向字符串常量的char型指针,str2是分配了空间的char型指针。
开始想着是不是左边赋值成功就返回一个true 或者1,在与右边比较,但是这样就没法正常运行,可能还是个死循环,于是决定自己探索一下到底(*str2++=*str1++)
等于什么。
- 首先我看到的代码如愿的在等于’\0’的时候停下来了,猜测左边赋值结束等于的是指向的字符串中当前字符,上代码:
int main(){
char *str = "Hard World!";
char *str2=(char*)malloc(sizeof(char)*32);
printf("%c\n",(*str2++ = *str++));
return 0;
}
编译成功后运行结果
H
证明猜想正确,赋值结束后确实返回当前指向的字符,给个循环应该可以全部打出来
int main(){
char *str = "Hard World!";
char *str2=(char*)malloc(sizeof(char)*32);
while( *str != '\0'){
printf("%c\n",(*str2++ = *str++));
}
return 0;
}
输出
H
a
r
d
W
o
r
l
d
!
这种写法固然装*,但是还是推荐老老实实的判断里面再赋值。
-大结局