首页 > 解决方案 > 出现错误 - 在初始化之前引用的局部变量

问题描述

我写了一个简单的函数,它读入一个指向数组的指针。它查看数组的元素并比较相邻值是否相等。如果它们相等,则将它们的值添加到“总和”

我收到一个运行时错误,告诉我“在初始化之前引用了本地“总和”。” 我不明白这一点,因为 sum 肯定是在我的函数中初始化的。请参阅代码片段。

int arrRead (char *Pinput){

    int sum, a, b = 0;

    while (*Pinput){
        a = *Pinput;
        ++Pinput;
        b = *Pinput;
        if(a == b)
            sum += a;
    }
    return sum;
}

标签: c

解决方案


int sum, a, b = 0;

这里只b用 初始化0

sum并且a未初始化。

你需要写:

int sum = 0, a = 0, b = 0;

或者,每个变量单独一行:

int sum = 0;
int a = 0;
int b = 0;

即使在您的函数中技术上只sum需要初始化算法才能工作,在声明时初始化所有变量也是一个很好的做法。


@melpomene 的另一个好建议是缩小变量的范围。例如aandb仅在while循环中使用:

int sum = 0;

while (*Pinput){
    int a = *Pinput;
    ++Pinput;
    int b = *Pinput;
    if(a == b)
        sum += a;
}
return sum;

推荐阅读