인프런 커뮤니티 질문&답변

강지훈님의 프로필 이미지

작성한 질문수

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

16. Anagram (구글 인터뷰 문제)

배열 위치

작성

·

323

0

int a[60], b[60]; 이것을 

main() 함수에 집어넣으면 no 라고 나오고

ex) 

int main() {

int a[70],b[70];

main()위에 전역함수?

ex)

int a[70],b[70];

int main(){

로 넣으면 yes로 나오는데 왜 그런건가요..

답변 2

0

선생님 답변 전에 알고 있는 거라도 말씀드리면..

말씀하신 두 개의 차이는 초기화 여부인 듯합니다.

main함수 위에 변수를 선언하게 되어버리면 전역변수가 되어서 0으로 초기화 됩니다.

그러나 main  함수 안에 변수를 선언하게 되면 지역변수가 되어서 초기화되지 않고 쓰레기값(설정치 않은 값)이 들어갈 수 있습니다. 

 이 차이 때문에 과정에서 오류가 발생한 것이 아닐까 합니다.

강지훈님의 프로필 이미지
강지훈
질문자

댓글 감사합니다 한가만 더 물어봐도 될까요?? 여태껏 main함수에서 변수 선언하는데 다 괜찮았는데 이것만 오류나서...

그럼 지역변수에서 초기화할려면 어떻게해야하나요??

이것도 제가 알고 있는 불완전한 지식으로만이라도 말씀드리면...

우선 말씀해주신 두 가지에 대해 말씀 드리겠습니다. 

1) 이것만 오류가 났다 

A. 아마도 다른 경우에는 우연하게도 해당 배열에 제대로된 값이 들어갔을 경우가 높습니다. 이 이상으로는 제가 알고 있는 지식으로 답변을 드릴 수가 없어 죄송합니다.

2) 지역변수에서 초기화하려면 어떻게 해야 하나?

A. 배열 선언과 동시에 초기화를 하시면 될 듯합니다. 

예를 들자면, int a[70] = {0, }; 

이라고 초기화를 하시면 정수형 배열 a 는 모두 0으로 초기화 됩니다. 

배열은 선언과 동시에 일괄적으로 할당할 수 있습니다. 다만 배열을 선언한 다음에는 위처럼 일괄할당을 적용하지 못하는 것으로 알고 있습니다. 

또, 배열을 선언과 동시에 할당할 경우 int a[70] = {1, } ; 라고 하면 첫번째 배열의 요소에 1이 들어가고 나머지 지정치 않은 공간은 0으로 자동 초기화가 이뤄집니다.