C++中内置变量的初始化

对于全局的变量

如果内置类型的变量未被显示地初始化,它的值将由定义的位置决定。

(1).定义在函数体之外的变量将被初始化为0

(2).定义在函数体内部的变量将不被初始化,它的值将是任意的。

 

对于(1)举例如下:

short sn;
int in;
long ln;
long long lln;
float f;
double d;
long double ld;
bool b;
char c;
wchar_t wc;
int nArr[10];

void PrintVariable() 
{
	cout << "short:" << sn << endl;
	cout << "int:" << in << endl;
	cout << "long:" << ln << endl;
	cout << "long long:" << lln << endl;
	cout << "float:" << f << endl;
	cout << "double:" << d << endl;
	cout << "long double:" << ld << endl;
	cout << "bool:" << "he" << c << "llo" << endl;
	cout << "char:" << c << endl;
	cout << "wchar_t:" << "he" << wc << "llo" << endl;
	cout << "print array:" << endl;
	for (int i = 0; i < 10; i ++)
	{
		cout << nArr[i] << "    ";
	}
	cout << endl;
}

结果

short:0
int:0
long:0
long long:0
float:0
double:0
long double:0
bool:he llo
char: 
wchar_t:he0llo
print array:
0    0    0    0    0    0    0    0    0    0 


对于(1)举例如下:

void PrintVariable() 
{
	short sn;
	int in;
	int nArr[10];

	int num = in;					//未被初始化,不请允许拷贝:Run-Time Check Failure #3 - The variable 'in' is being used without being initialized.
	cout << "short:" << sn << endl;			//未被初始化,不允许访问该成员:Run-Time Check Failure #3 - The variable 'sn' is being used without being initialized.
	cout << nArr[0] << in << endl;			//未被初始化,不允许访问该成员:Run-Time Check Failure #3 - The variable 'in' is being used without being initialized.
}




 

类内的成员变量

如果是在类中定义的类成员,则初始化的顺序为:

1.构造函数初始化

2.如果没有构造函数,则通过类内的初始值进行初始化(可能有些较老的版本不允许有类内初始值)

3.默认初始化(值将是未定义的,是任意的)


没有构造函数初始化:

#pragma once

#include <iostream>
using namespace std;

class TestData
{

public:
	//TestData(void);
	~TestData(void);

	void PrintVariable() 
	{
		cout << "short:" << sn << endl;
		cout << "int:" << in << endl;
		cout << "long:" << ln << endl;
		cout << "long long:" << lln << endl;
		cout << "float:" << f << endl;
		cout << "double:" << d << endl;
		cout << "long double:" << ld << endl;
		cout << "bool:" << "he" << c << "llo" << endl;
		cout << "char:" << c << endl;
		cout << "wchar_t:" << "he" << wc << "llo" << endl;
		cout << "print array:" << endl;
		for (int i = 0; i < 10; i ++)
		{
			cout << nArr[i] << "    ";
		}
		cout << endl;
	}
private:
	short sn;
	int in;
	long ln;
	long long lln;
	float f;
	double d;
	long double ld;
	bool b;
	char c;
	wchar_t wc;
	int nArr[10];

};

结果(很可怕):

short:-13108
int:-858993460
long:-858993460
long long:-3689348814741910324
float:-1.07374e+008
double:-9.25596e+061
long double:-9.25596e+061
bool:he蘬lo
char:
wchar_t:he52428llo
print array:
-858993460    -858993460    -858993460    -858993460    -858993460    -858993460
    -858993460    -858993460    -858993460    -858993460


通过构造函数初始化

#pragma once

#include <iostream>
using namespace std;

class TestData
{

public:
	TestData(void) : sn(0), in(0), ln(0), lln(0), f(0), d(0.0), ld(0), b(true), c(' '), wc(L' ')
	{
		memset(nArr, 0, 10*sizeof(int));
	}

	~TestData(void);

	void PrintVariable() 
	{
		cout << "short:" << sn << endl;
		cout << "int:" << in << endl;
		cout << "long:" << ln << endl;
		cout << "long long:" << lln << endl;
		cout << "float:" << f << endl;
		cout << "double:" << d << endl;
		cout << "long double:" << ld << endl;
		cout << "bool:" << "he" << c << "llo" << endl;
		cout << "char:" << c << endl;
		cout << "wchar_t:" << "he" << wc << "llo" << endl;
		cout << "print array:" << endl;
		for (int i = 0; i < 10; i ++)
		{
			cout << nArr[i] << "    ";
		}
		cout << endl;
	}
private:
	short sn;
	int in;
	long ln;
	long long lln;
	float f;
	double d;
	long double ld;
	bool b;
	char c;
	wchar_t wc;
	int nArr[10];

};


结果:

short:0
int:0
long:0
long long:0
float:0
double:0
long double:0
bool:he llo
char:
wchar_t:he32llo
print array:
0    0    0    0    0    0    0    0    0    0


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌尘(MoChen)

爱打赏的人技术成长更开哦~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值