int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/11 18:15:51
int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]

int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]
int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]

int i=0,a[]={3,4,5,4,3}; do{a[i++];{while (a[++i]
while前的括号打反了?

程序并不会出问题, 因为第一次循环a[i++];执行后, i = 1; while条件中先++i, 导致i = 2, 而a[2] < 5 条件是不成立的, 直接跳出了do {} while循环. 执行for循环遍历打印a数组.

这里如果a[] = {2,3,4,5,4,3}就出问题了, 正好把a[3]=5跳过去了, 会再次进入循环, 结果是数组越界了. 结果就不一定了, 越界后如果那段内存不可读, 程序就崩溃了, 如果可读读则读到一个随机值, 正好是大于5的, 也就碰巧出循环了.

a[i]++ ?
那分析是这样:
第一次: a[i]++; 此时a[0] = 4; i = 0;
while (a[++i] < 5); 此时i = 1, 判断的是a[1] < 5, 条件成立
第二次:a[i]++; 此时a[1] = 5; i = 1;
while (a[++i] < 5); 此时i = 2; 判断的是a[2] < 5, 条件不成立, 跳出循环.

数据变成45543, 我已运行确认是这结果, 跟你的结果不一样, 看看是不是哪里还输入错了.