완료됨
OOB
int a;
if (a==1){
printf("%d",  &buf[idx]);
}
else  return 0;

라는 걸 봤을 때, '&'는 buf라는 정수형 변수의 주소를 가리키는 포인터라고 생각이 들었지만 그렇게 생각했을 뿐이고 정확하게
단정을 지을 수가 없었어요. 그런데 buf 뒤에 있는 [ ] 는 정수형 변수를 선언할 때, 배열로써 반복되는 수고를 덜 수 있는 기호라고 배운 기억이 있습니다.
그런데 포인터와 배열이 어떻게 이런 식으로 혼합될 수 있는 것인지... 정확한 답변이 필요하군요.

#시스템해킹
작성자 정보
더 깊이 있는 답변이 필요할 때
드림핵 팀과 멘토에게 직접 문의해 보세요!
답변 1
Karatus
워게임: 50

결론부터 말씀드리자면 그냥 문법이 그런겁니다.
C언어에서 포인터 변수의 (주소가 아닌 안에 담긴) 을 표현하는 방법을 예시를 통해 간단히 보려드리면,

int *buf; //포인터 변수

  1. 일반적인 방법: '*'를 통해 해당 주소의 값 접근하기
    *(buf + 2) // 3번째 인덱스의 값
  2. 또다른 방법: '[]'를 통해 배열처럼 접근하기
    buf[2] // 3번째 인덱스의 값

보통 두번째 방법을 많이 쓰는데, 그 이유는 원래 문법대로 쓰게 되면 프로그래머가 저렇게 적을때마다 굉장히 불편합니다.
그렇기 때문에 저렇게 간편히 나타낼 수 있는 문법을 만들어놓은 것이죠.

보여주신 예시에서는 해당 값의 주소를 scanf의 인자로 전달하기 위해 엔퍼센트(&)를 붙인 것을 알 수 있습니다.

혹시 그래도 잘 모르시겠다면 포인터 문법에 대해 인터넷 검색해서 자세히 알아보시는 것도 좋습니다.

2021.03.10. 22:32