while循环的坑

在使用循环时,一定要注意循环的边界情况,在边界上不上心绝对是自己给自己挖坑,下面有一段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 循环时一定要注意循环条件的边界问题,确定循环后的数据依旧在自己的意料之内。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值