关于下列代码的问题
#include <stdio.h>int main()
{
int a={1,2,3,4,5};
int *ptr=a;
int count=0;
while(*ptr++!='\0')
count++;
printf("%d",count);
return 0;
}
为什么最终count会等于7而不是5呢? 本帖最后由 3-3 于 2017-11-18 08:22 编辑
while(*ptr++!='\0')
循环的判断条件不对。 数组一共只有5个元素,最后一个元素就是5, 它不是字符串。按照你这样写,那么指针就一直往后读内在,直到读到'\0'为止,越界了。 对于整形数组,不能拿'\0'作为数据结束的判断依据,只有字符数组才行 本帖最后由 <(¥_$)> 于 2017-11-18 10:38 编辑
这要从栈的结构说起了
这里就拿vc++6.0的debug编译结果举例
局部变量在栈中的分布如图
int、int*在32位程序中都占4字节
ptr指针指向a数组,循环寻找到4字节为0数据时候的停止,可以看出数组a首地址距离下一个4字节为0数据相差了13个4字节,所以,我这里输出的结果为13
所以说,你这个程序在不同环境下编译,甚至不同环境下运行都有不确定性
另外说一点,就这个程序而言,count可以写成
count = sizeof(a) / sizeof(a);
页:
[1]