R&E: research & education/Research

C언어 array[-1]에 접근할 수 있는 방법

KMS studio 2021. 5. 8. 13:00

오늘은 거대한, signature 프로젝트 보다는간단하게 신기한 코드를 알아보도록 합시다.

이건 제가 알아낸 방법이며, 어디든 퍼가도 좋으니 제발 퍼가신다면 출처에 KMS studio라고 잘보이게 써주세요


코드

#include <stdio.h>

int main(void) {
	int array_s[5] = { 0, 1, 2, 3, 4 };
	int* arr = array_s + 4;
	int i;

	printf("arr[-3] = %d\n\n", arr[-3]);

	for (i = -4; i <= 0; i++) {
		printf("arr[%2d] = %d\n", i, arr[i]);
	}
	return 0;
}

출력결과


원리

간단한 원리로 "이게 될까?"했는데 "이게 되네?"가 되서 올립니다.

사실 포인터만 배우시면 이정도 프로그램 원리는 알 것이라 생각합니다.

 

printf 부분만 보면 런타임에러가 발생하거나 쓰레기 값이 출력될 것 같은 생긴 코드지만

arr[-3] 이 사실상 array + 4 - 3 = array_s[1]을 뜻하죠. 조금 풀어서 해석해보면 아주 자연스러운 코드가 되죠.

마찬가지로 for문의 내용도 arr_s[0 ~ 4]까지의 값을 출력하는 코드입니다.


활용

이 소스는 본능적으로 아시게지만 신기하다는 것 말고는 거의 쓸데가 없습니다.

다만, 가끔식 초기값의 수가 정적이고 아주 많은 점화식을 구현하는데 사용하면 가독성이 좋아집니다.