반응형
Notice
Recent Posts
Recent Comments
Link
안 쓰던 블로그
배열 마이너스 주소에 관하여 본문
반응형
이 글(http://foxtrotin.tistory.com/40)에서 배열의 마이너스 주소에 대해 질문을 받았습니다.
요지는 lake[-1][-1]이 왜 에러가 나지 않는가..에 관한 내용입니다.
배열이란 같은 데이터형을 가진 여러개의 데이터가 메모리 안에 쭉 나열되어 있는 것을 뜻합니다.
배열의 요소가 되는 각각의 데이터는 인덱스라는 일렬번호를 부여받는데,
컴파일 할 때 이 인덱스와 실제 메모리 어드레스간의 변환 작업을 거쳐 인덱스에 대응하는 메모리 영역을 쓸 수 있는 것입니다.
이러한 이유로 lake[-1][-1]을 호출하면 우리는 모르지만 거기에 해당되는 메모리 영역을 가져오게 되기 때문에 에러가 나지 않습니다.
코드로 살펴보겠습니다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #include <stdio.h> int main() { int a[10][10]; int w, h; scanf("%d %d\n", &w, &h); for (int i = 0; i < h; i++) { for (int j = 0; j < w; j++) { scanf("%d", &a[i][j]); } } a[-1][-1] = 2; printf("2로 초기화 후 출력:%d 16진수:%x\n", a[-1][-1], &(a[-1][-1])); printf("초기화 하지 않음:%d 16진수:%x\n", a[-2][-2], &(a[-2][-2])); printf("입력 받은 값의 1,1부분을 출력:%d 16진수:%x\n", a[1][1], &(a[1][1])); } | cs |
출력
a[-1][-1]이든, a[1][1]이든 메모리 영역을 가지고 있고,
마이너스 영역 역시 초기화를 해주면 사용할 수 있다는 것을 알 수 있습니다.
반응형
'알고리즘 > Algorithm' 카테고리의 다른 글
완전 탐색(Brute Force) (2) | 2019.05.04 |
---|---|
C언어 알고리즘 - 깊이 우선 탐색(DFS) (0) | 2018.03.27 |
C언어 알고리즘 - 그래프 개요, 정의, 종류 (0) | 2018.03.27 |
C언어 이진탐색 (2) | 2016.09.04 |
c언어 DFS알고리즘(깊이 우선 탐색) (3) | 2016.05.06 |
Comments