优化前
优化前代码
#include <stdio.h>
int main(void)
{
char dest[30] = "i love ";
char src[30] = "china";
char *p = dest;
char *q = src;
while('\0' != *p)
{
p++;
}
while(1)
{
*p = *q;
if('\0' == *p)
{
break;
}
p++;
q++;
}
printf("%s\n", dest);
return 0;
}
优化后
优化后代码
#include <stdio.h>
int main(void)
{
char dest[8] = "i love ";
char src[10] = "china";
printf("%s\n", dest);
char *p = dest;
char *q = src;
while('\0' != *p)
{
p++;
}
while(*p++ = *q++);
printf("%s\n", dest);
return 0;
}
思考
1.优化后版本,第10行,不能优化为
while(*p++);
这样会导致指针p指向了’/0’的下一个地址。会报错:段错误。
可以思考并类比下面的案例中的代码
#include <stdio.h>
int main(void)
{
int i = 5;
while(i--);
printf("%d\n", i);
return 0;
}
思考下,会打印出什么内容呢?
2.优化后的版本,第17行代码
while(*p++ = *q++);
可以这么写,是因为while后面的括号,具有一些判断的功能。
另外,指针q会指向’\0’的下一个地址,因为’\0’已经拷贝给p了,此时指针指向哪里,已经不重要了。
参考资料:
[1]: 王桂林 《零基础入门C语言》