변수들이 전역으로 선언 되었는지 지역으로 선언되었는지에 따라서 그 변수가 자동초기화가 될수도 있고 안될수도 있다. 먼저 전역변수 일때 부터 보자.
전역변수일때
변수들은 전역변수로 썼을때 자동 초기화가 된다.
따로 초기화가 되지 않은 int, char, bool은 모두 0으로 자동 초기화가 된다.
배열을 선언할때 초기화를 해주지 않으면 배열 전체가 자동초기화 되며, 일부분만 초기화 시켜주었을떄는 나머지 부분만 자동 초기화 된다.
int 와 bool, char을 자동 초기화 시켜볼 거다.
bool에서의 0은 false이고 char에서의 0은 null이다.
#include <iostream>
#include <windows.h>
using namespace std;
// 자동초기화가될 전역 변수들
int a;
int b[10]={3,4};
bool c,d[10]={true,true};
char e;
char f[10]={'a','b',};
int main(){
int i;
cout<<"int a = "<<a<<endl;
cout<<"int b[10] = ";
for(i=0;i<10;i++){
cout<<b[i]<<", ";
}
cout<<endl<<"bool c = "<<c<<"/";
if(c)cout<<"true"<<endl;
else cout<<"false"<<endl;
cout<<"bool d[10] = ";
for(i=0;i<10;i++){
cout<<d[i]<<"/";
if(d[i])cout<<"true"<<", ";
else cout<<"false"<<", ";
}
cout<<endl<<"char e = "<<(int)e<<"/"<<e<<endl;
cout<<"char f[10] = ";
for(i=0;i<10;i++)cout<<(int)f[i]<<"/"<<f[i]<<", ";
cout<<endl;
system("PAUSE");
}
다음과 같은 실행 결과를 볼 수 있다.
int a = 0
int b[10] = 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
bool c = 0/false
bool d[10] = 1/true, 1/true, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false,
char e = 0/
char f[10] = 97/a, 98/b, 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ ,
Press any key to continue . . .
지역변수 일때
지역변수일때는 자동초기화가 되지 않는다.
그러나 배열을 초기화 할때는 어느정도 자동초기화가 가능하다.
위 코드의 전역변수들을 다 지역변수로 바꾼뒤 실행해보면,
.
.
.
int main(){
int i;
// 자동 초기화가 안되는 지역변수들
int a;
int b[10];
bool c,d[10];
char e;
char f[10];
.
.
.
결과
int a = 8
int b[10] = 7405516, 1993069040, 1613752475, -2, 1992980420, 1993114840, 1647024, 1646960, 8010104, 1993111566,
bool c = 0/false
bool d[10] = 0/false, 0/false, 0/false, 0/false, 2/true, 0/false, 0/false, 0/false, 11/true, 232/true,
char e = 0/
char f[10] = 27/ , -105/? -113/? 22/ , 0/ , -1/, 112/p, 0/ , -91/? 119/w,
Press any key to continue . . .
모든 변수에 쓰래기 값이 들어있음을 알 수 있다.
그런데 배열만큼은에 전역변수처럼 자동초기화가 가능하다.
다음과 같이 선언해주자.
int main(){
int i;
// 자동 초기화가 안되는 지역변수들
int a;
int b[10]={};
bool c,d[10]={};
char e;
char f[10]={};
이러면 모든 배열이 자동초기화가 된다. 그리고 마찬가지로 배열의 일부분만 초기화 시켜줘도 나머지 부분이 자동 초기화 된다.
결과,
int a = 8
int b[10] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
bool c = 0/false
bool d[10] = 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false,
char e = 0/
char f[10] = 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ ,
Press any key to continue . . .
전역변수일때
변수들은 전역변수로 썼을때 자동 초기화가 된다.
따로 초기화가 되지 않은 int, char, bool은 모두 0으로 자동 초기화가 된다.
배열을 선언할때 초기화를 해주지 않으면 배열 전체가 자동초기화 되며, 일부분만 초기화 시켜주었을떄는 나머지 부분만 자동 초기화 된다.
int 와 bool, char을 자동 초기화 시켜볼 거다.
bool에서의 0은 false이고 char에서의 0은 null이다.
#include <iostream>
#include <windows.h>
using namespace std;
// 자동초기화가될 전역 변수들
int a;
int b[10]={3,4};
bool c,d[10]={true,true};
char e;
char f[10]={'a','b',};
int main(){
int i;
cout<<"int a = "<<a<<endl;
cout<<"int b[10] = ";
for(i=0;i<10;i++){
cout<<b[i]<<", ";
}
cout<<endl<<"bool c = "<<c<<"/";
if(c)cout<<"true"<<endl;
else cout<<"false"<<endl;
cout<<"bool d[10] = ";
for(i=0;i<10;i++){
cout<<d[i]<<"/";
if(d[i])cout<<"true"<<", ";
else cout<<"false"<<", ";
}
cout<<endl<<"char e = "<<(int)e<<"/"<<e<<endl;
cout<<"char f[10] = ";
for(i=0;i<10;i++)cout<<(int)f[i]<<"/"<<f[i]<<", ";
cout<<endl;
system("PAUSE");
}
다음과 같은 실행 결과를 볼 수 있다.
int a = 0
int b[10] = 3, 4, 0, 0, 0, 0, 0, 0, 0, 0,
bool c = 0/false
bool d[10] = 1/true, 1/true, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false,
char e = 0/
char f[10] = 97/a, 98/b, 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ ,
Press any key to continue . . .
지역변수 일때
지역변수일때는 자동초기화가 되지 않는다.
그러나 배열을 초기화 할때는 어느정도 자동초기화가 가능하다.
위 코드의 전역변수들을 다 지역변수로 바꾼뒤 실행해보면,
.
.
.
int main(){
int i;
// 자동 초기화가 안되는 지역변수들
int a;
int b[10];
bool c,d[10];
char e;
char f[10];
.
.
.
결과
int a = 8
int b[10] = 7405516, 1993069040, 1613752475, -2, 1992980420, 1993114840, 1647024, 1646960, 8010104, 1993111566,
bool c = 0/false
bool d[10] = 0/false, 0/false, 0/false, 0/false, 2/true, 0/false, 0/false, 0/false, 11/true, 232/true,
char e = 0/
char f[10] = 27/ , -105/? -113/? 22/ , 0/ , -1/, 112/p, 0/ , -91/? 119/w,
Press any key to continue . . .
모든 변수에 쓰래기 값이 들어있음을 알 수 있다.
그런데 배열만큼은에 전역변수처럼 자동초기화가 가능하다.
다음과 같이 선언해주자.
int main(){
int i;
// 자동 초기화가 안되는 지역변수들
int a;
int b[10]={};
bool c,d[10]={};
char e;
char f[10]={};
이러면 모든 배열이 자동초기화가 된다. 그리고 마찬가지로 배열의 일부분만 초기화 시켜줘도 나머지 부분이 자동 초기화 된다.
결과,
int a = 8
int b[10] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
bool c = 0/false
bool d[10] = 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false, 0/false,
char e = 0/
char f[10] = 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ , 0/ ,
Press any key to continue . . .
9ood
답글삭제