变量在声明后具有值
Variables have values after declaring them
我刚开始学习c++,遇到了一个小问题。在声明变量之后,将为其分配值。
#include <iostream>
#include <fstream>
using namespace std;
ifstream d ("d.txt");
ofstream r ("r.txt");
int plotas (int a, int b);
int main()
{
int p,
a,
n,
x1,
x2,
y1,
y2,
s,
s1;
d >> p >> a;
d >> n;
for(int i =0; i < n; i++){
d >> x1 >> y1 >> x2 >> y2;
s+= plotas((x2-x1), (y2-y1));
}
s1= plotas(p, a)- s;
cout << s1;
}
int plotas (int a, int b){
return a*b;
}
例如,变量s为1967866170。它们不应该都是0吗?我做错了什么?
未分配任何值的局部变量具有所谓的不确定值(也称为垃圾值,它是以前存储在该内存位置(在c和c++中)的值),访问未初始化的变量会导致未定义的行为。
如果不给它们赋值,它们将具有垃圾值。
但static
和全局变量的默认值为0
http://en.cppreference.com/w/cpp/language/default_initialization
默认初始化在三种情况下执行:
1)当具有自动、静态或线程本地存储持续时间的变量为声明时没有初始化项。
2) 当具有动态存储的对象duration由不带初始值设定项的新表达式创建,或者当对象是由一个新表达式创建的,初始值设定项由(直到C++03)。
3) 当基类或构造函数初始值设定项中未提及非静态数据成员列表,然后调用该构造函数。
默认初始化的效果是:
如果T是非POD(直到C++11)类类型,则考虑构造函数,并对空进行重载解析参数列表。所选的构造函数(它是默认的构造函数之一构造函数)来为新的对象
如果T是数组类型,则默认初始化数组中的每个元素。
否则,将不执行任何操作:具有自动存储持续时间的对象(及其子对象)将初始化为不确定值
访问未初始化的变量将导致未定义的行为。另外,请参阅此答案。
在执行加法赋值s+=plotas((x2-x1),(y2-y1))之前,需要初始化"s"。
只需初始化变量以防止它们假设任何垃圾值:
int p=0, a=0,n=0,x1=0,x2=0,y1=0,y2=0,s=0,s1=0;
您还可以根据代码的需要将它们初始化为除0
之外的任何int
。
相关文章:
- 在疯狂的部分中声明变量
- 如何在C++中为高分辨率时钟声明变量?
- 在命名空间中声明变量,在 main 中定义它,使其对所有其他文件可见
- CUDA 的性能取决于声明变量
- 如何在不为其声明变量的情况下获取和使用常量值的地址?
- C++声明变量时自动类型推断而不初始化
- 在不同循环中多次声明变量的优点
- 奇怪的错误 C2131 与 constexpr 声明变量
- 是否可以在 "if" 语句中声明变量?
- 在python-ctypes中声明变量并传递给dll函数
- 在递归函数C++中声明变量
- 只有一个定义/声明时标头声明变量的多堆定义错误
- 奇怪的未声明变量编译器错误
- 我在C++程序中声明变量时遇到问题
- 在命名空间中声明变量
- C++ lambda 按值捕获,而无需更早声明变量
- 声明变量以保存字符串列表时的内存分配
- 如何声明C 变量应突变
- 为什么允许在开关语句中声明变量?但不是声明 初始化
- 在同一命名空间中声明变量和函数是否出错?[C++]