c++ 전역변수로 선언된 char board[n][n];에 대하여.

이런 내용을 보게 되었고, 

지금까지는 전역변수로 선언을 하고 초기화를 안해주면 알아서 초기화가 된다는걸로 생각을 했는데, 그때 초기화가 되면 뭘로 초기화가 된다는건지 궁금해졌다. 

이 경우 초기값이 전부 NULL이어서 잘 작동한다고 주석을 써주었다. 

지피티에 물어봤을때는 char형이므로 모두 0으로 초기화 된다고 하는데, 이걸 내가 직접 출력을 해보았을때 

나오는것이 없었다. 

#include <bits/stdc++.h>
using namespace std;

char board[22][22];

int main() {
	ios::sync_with_stdio(0); 
	cin.tie(0);

	for (int i = 0; i < 22; i++) {
		for (int j = 0; j < 22; j++)
			cout << board[i][j] << " ";
		cout << "\n";
	}
			
}

코드를 이렇게 작성해서 출력을 해보았을때의 결과물이 

이런 형식으로 공백이 크게 나왔다. 아마 22 * 22 사이즈로 표현이 되고 전부 공백으로 표현되어있을 것으로 보여진다. 

#include <bits/stdc++.h>
using namespace std;

char board[22][22] = {1,1,2};

int main() {
	ios::sync_with_stdio(0); 
	cin.tie(0);

	for (int i = 0; i < 22; i++) {
		for (int j = 0; j < 22; j++)
			cout << board[i][j] << " ";
		cout << "\n";
	}
}

이런 코드를 만들어서 출력을 해보면 더욱 재미난 결과물이 나온다. 

이런식의 형태를 볼 수 있다. 결국 앞에 3개의 칸에 내가 int값으로 적어 넣은 숫자에 해당하는 char가 들어간것으로 보여진다. 그럼 전체를 0으로 매꾼 경우는 어떻게 될까. 

 

#include <bits/stdc++.h>
using namespace std;

char board[2][2] = 
{	{0,0},
	{0,0} };

int main() {
	ios::sync_with_stdio(0); 
	cin.tie(0);

	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 2; j++)
			cout << board[i][j] << " ";
		cout << "\n";
	}
}

이런식으로 char에 0으로 메워서 코드를 실행해보면, 

 

 

 

이런식으로 다시 공백이 나온다. 

 

이와 관련하여서 char의 초기화와 null등에 관한 정보를 검색하며 보게 된 블로그를 같이 첨부한다. 

http://khgkjg12.blogspot.com/2016/07/c_31.html

 

변수와 배열의 자동 초기화(C++)

변수들이 전역으로 선언 되었는지 지역으로 선언되었는지에 따라서 그 변수가 자동초기화가 될수도 있고 안될수도 있다. 먼저 전역변수 일때 부터 보자. 전역변수일때 변수들은 전역변수로 썼

khgkjg12.blogspot.com

 

딱 내가 현재 하고 있는 상황에서 "char에서의 0은 null이다" 에 해당하는 상황이라고 보여진다.

일단은 이 글을 읽어보고, 전역변수로 초기화를 하지 않은 bool은 0으로 false, int는 0, char는 0으로 null이라고 생각하면 될듯하다.

 

 

  Comments,     Trackbacks