博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
while循环的坑
阅读量:3945 次
发布时间:2019-05-24

本文共 659 字,大约阅读时间需要 2 分钟。

在使用循环时,一定要注意循环的边界情况,在边界上不上心绝对是自己给自己挖坑,下面有一段c语言的代码

int main(){	char *a = "qweqerds";	printf("%d ",a);	while(*a++ != '\0')	{		printf("%d ",a);	}	printf("%d ",a);	return 0;}

在这里插入图片描述

在程序中,给字符字符串a包含8个字符+1个默认的’\0’,我们想要的是遍历整个字符串后使a指向’\0’的位置,这样的话a最终的地址应该是 48 的位置,在退出循环的时候a却指向了 49 的位置,如果我们想从最后一个位置重新开始写入一个字符串,在打印的时候将无法显示后来加上的字符串,因为在打印时’\0’会把后来的字符串屏蔽掉。

再看以下整个代码,while(*a++ != 0)这句代码是先判断*a是否等于’\0’,不管条件是否满足,都会执行a++;所以在最后的时候*a==’\0’之后a还会进行自加,所以此此时a就指向’\0’的下一个位置

如果改成下面这样

int main(){	char *a = "qweqerds";	printf("%d ",a);	while(*a != '\0')	{		printf("%d ",a);		a++;	}	printf("%d ",a);	return 0;}

在这里插入图片描述

可以看到最后a的值与最初的位置相差为8,此时a就指向的’\0’的位置了。
在使用while 循环时一定要注意循环条件的边界问题,确定循环后的数据依旧在自己的意料之内。

你可能感兴趣的文章
《非诚勿扰2》台词
查看>>
《班扎古鲁白玛的沉默》仓央嘉措
查看>>
《十诫诗》仓央嘉措
查看>>
《那一世》仓央嘉措
查看>>
《我问佛》仓央嘉措
查看>>
Maven中指定得AspectJ依赖无法添加得解决方案
查看>>
Spring3注释装配的最佳实践
查看>>
Mac Vi常用键
查看>>
jchardet字符编码自动检测工具
查看>>
使用Maven Archetype生成工程报错的解决
查看>>
System.getProperty()系统参数
查看>>
Linux系统下批量删除.svn目录
查看>>
大数据行业应用趋势
查看>>
Mac + Rails3 + MongoDB的Demo工程搭建
查看>>
隐藏于Python内的设计之禅彩蛋
查看>>
VSCode配置C/C++环境
查看>>
OTB测试之Visual Tracker Benchmark v1.0全过程配置流程
查看>>
缓存在Springboot应用中的使用
查看>>
Linux(一)- 认识Linux
查看>>
Linux(二)- Linux常用命令
查看>>