C Language [핵심정리] - 14
1. 반복문 사용해 배열의 모든 요소 출력
그전에 배열 요소의 개수를 구한 방법을 이용해서 배열의 모든 요소를 출력해보겠습니다.
이를 활용해 모든 요소들을 역순으로 출력할 수 있습니다.
역순으로 요소를 출력할 때는 배열의 개수 즉, 크기에 - 1 한 값부터 시작해야합니다. 그렇지 않으면 처음부터 배열의 인덱스를 벗어난 상태가 되기 때문에 처음 출력하는 인덱스 값이 쓰레기 값으로 출력되는 불상사가 발생할 수 있으니 주의해주세요.
배열 모든 요소의 합을 구할 때는
이처럼 더한 값을 저장하는 변수를 초기화 해줘야 합니다. 초기화하지 않으면 쓰레기 값이 들어있어 쓰레기 값과 요소의 값이 더해져 잘못된 결과가 출력됩니다. 즉, 값을 누적시키는 연산을 할 때는 항상 변수를 0으로 초기화 해주세요.
다만 제가 쓰는 컴파일러에서는 [error C4700: 초기화되지 않은 'sum' 지역 변수를 사용했습니다.]다는 에러가 발생해 컴파일 자체가 불가능합니다. (visual studio를 쓰시는 분은 참고해주세요.)
2. 포인터에 배열 사용하기
배열은 사실 첫 번째 요소의 주소값만을 담고 있습니다.
배열을 역참조하니 배열의 첫 번째 인덱스에 저장된 값이 나왔네요. 이를 통해서 여러분은 배열이 첫 번째 요소의 주소값을 가지고 있다는 사실을 확신할 수 있을겁니다.
포인터에 배열을 할당할 때는 자료형이 같아야 하며, 1차원 배열이면 *(Asterisk)가 한 개인 단일 포인터만 가능합니다.
포인터에 배열의 주소가 들어가면 포인터는 배열과 같은 역할을 할 수 있습니다. ex) 포인터를 역참조하면 배열의 첫 번째 요소의 값이 나오고, 인덱스를 통해 요소에 접근할 수 있습니다.
배열과 포인터의 다른점은 sizeof 연산자로 크기를 계산했을 때 입니다.
배열에 sizeof 연산자를 사용하면 배열이 차지하는 전체공간이 출력되지만, sizeof로 배열의 주소가 들어있는 포인터의 크기를 구하면 포인터의 크기만 나옵니다. (32bit라면 4byte, 64bit라면 8byte)
배열을 응용해서 10진수를 2진수로 변환할 수 있습니다. 일단 10진수에 2진수로 변환하는 방법은 10진수가 0이 될때까지 계속 나눈 뒤 나오는 나머지를 역순으로 읽으면 2진수가 됩니다.
결과가 맞는지 인터넷에 배포 되어있는 2진수 변환기로 확인해보겠습니다.
3. 2차원 배열 사용하기
이제는 평면 구조를 띄고 있는 2차원 배열에 대해 알아보시죠. 2차원 배열은 다음 그림과 같이 가로x세로로 이루어져 있으며 행과 열 모두 0부터 시작합니다.
2차원 배열은 [ ](대괄호)를 두 번 사용하여 선언하며, 첫 번째 대괄호에는 세로크기, 두 번째 대괄호에는 가로 크기를 지정합니다. 일반적으로 2차원 공간을 가로x세로로 표기하지만 배열로 만들 때는 세로x가로로 표기합니다. 주의하세요.
2차원 배열의 요소에 접근하려면 배열 뒤에 [ ](대괄호)를 두번 사용하며 [ ]안에 세로 와 가로 인덱스를 지정하면 됩니다.
즉, 2차원 배열과 1차원 배열을 사용하는 방법은 동일합니다.
이것처럼 처음에 오는 세로크기는 중괄호 안의 중괄호 개수를 그 다음에 오는 가로크기는 중괄호 안 중괄호 안의 숫자 개수를 의미합니다. 그렇다면 여기서 제대로 이해하셨는지 문제 하나 내볼게요.
Q. int numArr_2[4][5]라는 2차원 배열이 선언되었습니다. 여기서 모든 숫자를 0으로 할당하려면 어떤 형태로 코드를 작성해야 할까요?
A.
