变量在声明后具有值 我刚刚开始学习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; } #包括 #包括 使用名称空间std; ifstream d(“d.txt”); 流r(“r.txt”); int plotas(int a、int b); int main() { INTP, A. N x1, x2, y1, y2, s s1; d>>p>>a; d>>n; 对于(int i=0;i>x1>>y1>>x2>>y2; s+=绘图((x2-x1),(y2-y1)); } s1=曲线图(p,a)-s; cout
未分配任何值的局部变量具有所谓的值(也称为垃圾值,它是以前存储在该内存位置(在c和c++中)的值),访问未初始化的变量会导致未定义的行为 如果不给它们赋值,它们将具有垃圾值 但是变量在声明后具有值 我刚刚开始学习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; } #包括 #包括 使用名称空间std; ifstream d(“d.txt”); 流r(“r.txt”); int plotas(int a、int b); int main() { INTP, A. N x1, x2, y1, y2, s s1; d>>p>>a; d>>n; 对于(int i=0;i>x1>>y1>>x2>>y2; s+=绘图((x2-x1),(y2-y1)); } s1=曲线图(p,a)-s; cout,c++,C++,未分配任何值的局部变量具有所谓的值(也称为垃圾值,它是以前存储在该内存位置(在c和c++中)的值),访问未初始化的变量会导致未定义的行为 如果不给它们赋值,它们将具有垃圾值 但是静态和全局变量的默认值为0 默认初始化在三种情况下执行: 1)当 具有自动、静态或线程本地存储持续时间的变量为 声明时没有初始值设定项 2) 当对象具有动态存储时 持续时间由不带初始值设定项的新表达式创建,或者 对象由新表达式创建,初始值设定项包括 一对空括号(直到C++03) 3) 当基类或 构造函数初始值设定项中未提
静态
和全局变量的默认值为0
默认初始化在三种情况下执行:
1)当
具有自动、静态或线程本地存储持续时间的变量为
声明时没有初始值设定项
2) 当对象具有动态存储时
持续时间由不带初始值设定项的新表达式创建,或者
对象由新表达式创建,初始值设定项包括
一对空括号(直到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
。您的程序具有未定义的行为。除非您这样做,否则不会初始化本地原子(即非类)变量。因此,它们可能包含垃圾值,并且您通常会收到一些警告。零几乎不是“无值”。这绝对是一个值。请看Kerrek的评论。@jxh,我承认这是未定义的行为。但这是一般性的答案。OP会问为什么变量在声明后有一个值,这就是答案。我认为你的答案没有错,Arun,我投了赞成票accordingly@PoVa它可以是int x=0;
,也可以是<代码>整数x(0);第二个必须在声明行中。为了挑剔,“垃圾值”的正确术语是不确定值。