我编写了一个简单的函数,该函数读取指向数组的指针。它查看数组的元素,并比较相邻的值是否相等。如果它们相等,则将其值添加到“ sum”
我收到一个运行时错误,告诉我在初始化之前已引用“本地”和”。我不明白这一点,因为sum肯定是在我的函数中初始化的。参见代码片段。
int arrRead (char *Pinput){
int sum, a, b = 0;
while (*Pinput){
a = *Pinput;
++Pinput;
b = *Pinput;
if(a == b)
sum += a;
}
return sum;
}
答案 0 :(得分:6)
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的另一个好的建议是缩小变量的范围。例如a
和b
仅在while
循环中使用:
int sum = 0;
while (*Pinput){
int a = *Pinput;
++Pinput;
int b = *Pinput;
if(a == b)
sum += a;
}
return sum;
答案 1 :(得分:2)
您不是用
初始化sum
int sum, a, b = 0;
仅初始化b
。您还需要为sum
添加一个初始化程序。
int sum=0, a=0, b = 0;
答案 2 :(得分:0)
运算符+=
将右边的值添加到左边的值,然后将总和存储回左边的值。
如果sum
未初始化,则操作sum += X
调用未定义的行为;结果取决于先前的sum
值。