c - 出现错误 - 在初始化之前引用的局部变量
问题描述
我写了一个简单的函数,它读入一个指向数组的指针。它查看数组的元素并比较相邻值是否相等。如果它们相等,则将它们的值添加到“总和”
我收到一个运行时错误,告诉我“在初始化之前引用了本地“总和”。” 我不明白这一点,因为 sum 肯定是在我的函数中初始化的。请参阅代码片段。
int arrRead (char *Pinput){
int sum, a, b = 0;
while (*Pinput){
a = *Pinput;
++Pinput;
b = *Pinput;
if(a == b)
sum += a;
}
return sum;
}
解决方案
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
andb
仅在while
循环中使用:
int sum = 0;
while (*Pinput){
int a = *Pinput;
++Pinput;
int b = *Pinput;
if(a == b)
sum += a;
}
return sum;
推荐阅读
- apache-spark - 为什么 BigDecimal 的 Spark groupBy.agg(min/max) 总是返回 0?
- sql - 左外连接到表的前 1 行
- java - GSON 自动将 JSON 数组解包为 Java 对象
- package - 如何区分哪些软件包是“官方”或标准 Racket 发行版的一部分?
- java - Eclipse直接调试到接口方法
- python - Conda 命令不适用于当前环境,Python 版本
- python - 如何设置数据库.loc 函数设置许多值熊猫?
- javascript - 为什么 Object.defineProperty(Object.prototype, "propname", {.., value: fn} 将 fn 提升为全局变量?
- mockito - 如何编写 PowerMock 测试用例?
- apache-spark - 在没有持久化或缓存的情况下,Spark 是否会在每次操作时从磁盘读取数据?