一个小程序 但是很恼人
一个小程序 但是很烦人#include stdio.hvoid text(size_t index) //这个地方不知道是什么意思{int i 0
一个小程序 但是很烦人
#include <stdio.h>
void text(size_t index) //这个地方不知道是什么意思
{
int i = 0;
while(index > 0) //为什么这个循环老不退出呢?
{
i++;
printf("i = %d\n", i);
printf("index = %d\n", index); //打印的时候index居然是负数,但是在调试的时候它的值是很大的
index--; //不懂这是为什么?????
}
return ;
}
int main()
{
int i = -1;
text(i);
return 0;
}
大师们麻烦您们为我解答了,小弟拜谢!!!
[解决办法]
size_t是无符号的,即总是>=0
-1是0xffffffff,循环还是会退出了,但循环次数很多
[解决办法]
1. szie_t 是标准C库中定义的,在32为系统中表示unsigned int。
2. 在将i=-1传入text()的时候,-1转换成unsigned int后的值是4294967295。
所以index = 4294967295。故会循环很多次。
3. 输出负号,是因为你的输出格式是%d,要求带符号。
[解决办法]
[解决办法][解决办法]负数在内存中是以补码的形式存储的-1的补码为0xFFFFFFFF,szie_t 是标准C库中定义的,在32为系统中表示unsigned int。在将i=-1传入text()的时候,-1转换成unsigned int后的值是4294967295,所以循环多次,但总会退出循环。
输出格式是%d,要求为有符号数据所以每次输出的index总是负数
[解决办法][解决办法]size_t 无符号
在内存中是以补码形式
会是一个很大的数
[解决办法]两个printf涵数影响了运行速度,如果把两个printf涵数放到循环体外,相信很快会退出循环。
[解决办法][解决办法]while(index > 0)
这样写,就是想一直循环下去的吖~~
[解决办法]可能是数比较大,程序就崩了。。。不是死循环,有限的东西无论多大都不会是无限的,但会给人无限的感觉
[解决办法]执行了两分钟了还没结束!死循环???