완료됨
OOB
int a;
if (a==1){
printf("%d", &buf[idx]);
}
else return 0;
라는 걸 봤을 때, '&'는 buf라는 정수형 변수의 주소를 가리키는 포인터라고 생각이 들었지만 그렇게 생각했을 뿐이고 정확하게
단정을 지을 수가 없었어요. 그런데 buf 뒤에 있는 [ ] 는 정수형 변수를 선언할 때, 배열로써 반복되는 수고를 덜 수 있는 기호라고 배운 기억이 있습니다.
그런데 포인터와 배열이 어떻게 이런 식으로 혼합될 수 있는 것인지... 정확한 답변이 필요하군요.
#시스템해킹
작성자 정보
답변
1
Karatus
워게임: 50
결론부터 말씀드리자면 그냥 문법이 그런겁니다.
C언어에서 포인터 변수의 (주소가 아닌 안에 담긴) 값
을 표현하는 방법을 예시를 통해 간단히 보려드리면,
int *buf; //포인터 변수
- 일반적인 방법: '*'를 통해 해당 주소의 값 접근하기
*(buf + 2) // 3번째 인덱스의 값 - 또다른 방법: '[]'를 통해
배열처럼
접근하기
buf[2] // 3번째 인덱스의 값
보통 두번째 방법을 많이 쓰는데, 그 이유는 원래 문법대로 쓰게 되면 프로그래머가 저렇게 적을때마다 굉장히 불편합니다.
그렇기 때문에 저렇게 간편히 나타낼 수 있는 문법을 만들어놓은 것이죠.
보여주신 예시에서는 해당 값의 주소
를 scanf의 인자로 전달하기 위해 엔퍼센트(&)를 붙인 것을 알 수 있습니다.
혹시 그래도 잘 모르시겠다면 포인터 문법에 대해 인터넷 검색해서 자세히 알아보시는 것도 좋습니다.