C语言变量未初始化问题
//vararr2d.c -- 使用变长数组?
#include <stdio.h>
#define ROWS 3
#define COLS 4
int sum2d (int rows, int cols, int ar[rows][cols]);
int main(void)
{
int i, j;
int rs = 3;
int cs = 10;
int junk[ROWS][COLS] = {
{2, 4, 6, 8},
{3, 5, 7, 9},
{12, 10, 8, 6}
};
int morejunk[ROWS-1][COLS+2] = {
{20, 30, 40, 50, 60, 70},
{5, 6, 7, 8, 9, 10}
};
int varr[rs][cs]; // 变长数组
for (i = 0; i < rs; i ++){
for (j = 0; j < cs; j ++){
varr[i] [j] = i * j + j;
}
}
printf("2x6 arry\n"); //**第一次**
printf("Sum of all element = %d\n",
sum2d(ROWS -1, COLS + 2, morejunk));
printf("3x5 array\n"); //**第二次**
printf("Sum of all element = %d\n",
sum2d(ROWS, COLS, junk));
printf("3x10 VLA\n");
printf("Sum of all element = %d\n",
sum2d(rs, cs, varr));
return 0;
}
//带有一个VLA参数的函数
int sum2d(int rows, int cols, int ar[rows][cols])
{
int r;
int c;
int tot;
for (r = 0; r < rows; r ++){
for (c = 0; c < cols; c ++){
tot += ar[r][c];
}
}
return tot;
}
在上面的代码中, 被调用的函数的里的 tot 变量没有初始化,会导致最后的结果出问题。
但是为什么只是第一次调用之后出现了问题,而第二次第三次都没有出现问题?
是不是tot 在sum2d函数第一次被调用结束后自动被初始化为零?
希望前辈们能指点一下或者给一个方向。谢谢 :)
第一次使用的时候,没有初始化,结果不可知。而在后面的使用中,是由于电脑本身的机制决定的,这个变量在使用过之后,由于没有被回收,因此下次使用看起来没有问题。如果你隔几分钟在使用,那么结果就不一样的
第一次使用的时候,没有初始化,结果不可知。而在后面的使用中,是由于电脑本身的机制决定的,这个变量在使用过之后,由于没有被回收,因此下次使用看起来没有问题。如果你隔几分钟在使用,那么结果就不一样的
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。