-
C언어 array[-1]에 접근할 수 있는 방법R&E: research & education/Research 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]까지의 값을 출력하는 코드입니다.
활용
이 소스는 본능적으로 아시게지만 신기하다는 것 말고는 거의 쓸데가 없습니다.
다만, 가끔식 초기값의 수가 정적이고 아주 많은 점화식을 구현하는데 사용하면 가독성이 좋아집니다.
'R&E: research & education > Research' 카테고리의 다른 글
서울대학교 성적증명서 Microsoft print to pdf 지원하지 않는 포트 해결법 (1) 2024.07.19 C스러운 코드로 유혹하기. (비트연산, 연산우선순위 편) (0) 2023.12.09 Plane sweep algorithm (0) 2021.12.04 C언어 NIST a statistical Test Suite for Random and Pseudo random Number Generators for Ctyptographic Applications에 관련된 자료 (0) 2021.05.22 C언어 math.h에서 파이값 가져오는 방법 (0) 2021.05.15