티스토리 뷰

배열의 크기를 정하지 않고 사용할 때 자유롭게 사용할 수 있지 않을까? 하는 생각이 들어서

 

배열을 선언할 때 크기를 정하지 않고 사용했다.

1
2
3
    int Lotto[7= { 0 };
    int win_number[6= { 0 };
    int MyLotto[][7= { 0, };
cs

Lotto에는 매주 달라지는 당첨번호가 담겨있고, win_number에는 당첨번호가, MyLotto는 내가 저장할 로또 번호가 담겨있다.

로또 프로그램의 작동 방식은 처음에 1을 누르면 랜덤으로 번호가 선택되고 0을 누르면 번호를 직접 입력한다.

 

2차원 배열에 로또 번호를 저장한 후에(하나의 로또 번호를 하나의 Row) 매주 로또를 하나씩 산다고 가정하고 원하는 등수가 나올 때까지 작동한다.

 

따라서, 프로그램이 작동할 때 하나의 cycle에서 Lotto[7]와 win_number[7]을 초기화시켜야 한다

 

Lotto와 win_number를 초기화하려고 했지만 MyLotto의 값이 바뀌었다.

평소에는 항상 배열만 출력해서 확인했는데 이때 처음으로 주소를 확인할 수도 있다는 점을 알았다.

1
printf("\nLotto 주소 %u vs win_number 주소 = %u  vs  MyLotto 주소 = %u \n\n", Lotto, win_number, MyLotto);
cs

MyLotto와 win_number의 주소 차이는 32byte이고, MyLotto와 Lotto의 주소 차이는 64byte이다. 

 

정수 하나는 4byte이므로 win_number와 Lotto를 reset하면, win_number로 인해서 MyLotto의 8번째 칸( 7 + 1 )부터 0으로 reset되고 Lotto로 인해서 MyLotto의 16번째 칸(7 + 7 + 2 = 16)부터 0으로 reset된다. (7칸인 이유는 문자열이기 때문이다!)

MyLotto[][7]를 MyLotto[10][7]로 변경하면 정상작동한다.

 

C언어에서는 배열의 size를 정해주는 것이 좋다는 점을 배웠다.

 

* 결과로만 확인하지 말고 주소로도 확인할 수 있다.

* if문 뒤에 ; 붙이면 정상작동 안 함.

* C언어에서는 배열의 size를 정해주는 것이 좋다.

'신나는 탐구생활 > 프로그래밍' 카테고리의 다른 글

[C] 코딩일기_백준_입출력  (0) 2022.07.26
댓글