c-影响循环索引的Int变量减法



我使用for循环遍历char数组teste的元素。在这个循环中,我为一些控件使用了一个名为stack_index的int变量。下面的程序运行得很好,可以看到,它的结果是stack_index的值重复了18次(字符数组teste的大小(。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
size_t char_size (char* c) {
return strlen(c);
}
int main() {
char teste[] = "Este *teste* string";
size_t n = char_size(teste);
char stack[20];
int stack_index = 0;
for(int i; i < n; i++){
printf("%d", stack_index);
}
}

以上程序的结果:

0000000000000000000

但是,当我在循环中只添加stack_index--行时,循环索引会以某种疯狂的方式中断。请查看此程序的结果是值-1、-2和-3。这个结果表明for循环只运行了3次(而不是18次(。但为什么会发生这种情况呢?为什么在每次迭代中从stack_index变量中减去(或加(1会影响循环索引变量i?这对我来说毫无意义,因为i变量是循环的索引变量,而不是stack_index

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
size_t char_size (char* c) {
return strlen(c);
}
int main() {
char teste[] = "Este *teste* string";
size_t n = char_size(teste);
char stack[20];
int stack_index = 0;
for(int i; i < n; i++){
stack_index--;
printf("%d", stack_index);
}
}

以上程序的结果:

-1-2-3

@一些程序员的评论回答了这个问题。我没有用一些初始值初始化i变量(如0(。这个错误是破坏了循环,而不是stack_index--行。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
size_t char_size (char* c) {
return strlen(c);
}
int main() {
char teste[] = "Este *teste* string";
size_t n = char_size(teste);
char stack[20];
int stack_index = 0;
for(int i = 0; i < n; i++){
stack_index--;
printf("%d", stack_index);
}
}

以上程序的结果:

-1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19

最新更新