开发者社区> 问答> 正文

C语言变量未初始化问题

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函数第一次被调用结束后自动被初始化为零?
希望前辈们能指点一下或者给一个方向。谢谢 :)

展开
收起
杨冬芳 2016-05-30 19:12:03 3707 0
5 条回答
写回答
取消 提交回答
  • 第一次使用的时候,没有初始化,结果不可知。而在后面的使用中,是由于电脑本身的机制决定的,这个变量在使用过之后,由于没有被回收,因此下次使用看起来没有问题。如果你隔几分钟在使用,那么结果就不一样的

    2020-03-19 10:51:30
    赞同 展开评论 打赏
  • 专注物联网

    第一次使用的时候,没有初始化,结果不可知。而在后面的使用中,是由于电脑本身的机制决定的,这个变量在使用过之后,由于没有被回收,因此下次使用看起来没有问题。如果你隔几分钟在使用,那么结果就不一样的

    2019-07-17 19:20:59
    赞同 展开评论 打赏
  • 软件开发,安全加密

    使用未初始化的,结果是未知的,无法分析

    2019-07-17 19:20:59
    赞同 展开评论 打赏
  • 乐于学习与分析

    使用未初始化的,结果是未知的,无法分析

    2019-07-17 19:20:59
    赞同 展开评论 打赏
  • IT从业

    直接使用未初始化的局部变量是未定义的行为。你这种情况应该跟编译器有关吧。

    2019-07-17 19:20:59
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载