scanf 함수를 쓸 때 일반변수 앞에는 &를 사용하는 반면, 배열과 포인터 변수에는 사용하지 않는다고 알고있습니다.
scanf("%d", &a[i]); << 그런데 이 코드에서 a[i] 앞에 &가 붙는 이유가 뭔가요? a[i]는 이미 선언된 a[5]로 배열이라 &이 안붙어야 하는게 아닌가요?
안녕하세요 길벗수험서 운영팀입니다.
정확히 설명드리자면,
함수 scanf의 두 번째 인수는 [메모리 위치값](=포인터)이어야 합니다.
위치값(포인터)을 가리키는 것들에는 먼저 배열'명'이 있습니다.
int a[3]을 선언했다면
'a'라는 이름은 배열의 각 요소(a[0], a[1], a[2])의 시작 위치를 가리키는 포인터의 역할을 합니다.
다음은 위치값을 가리키는 예약어 '&'가 있겠네요.
아시는 바와 같이 일반 변수들 앞에 &를 적어주면 해당 변수가 저장된 메모리 위치인 포인터값을 나타냅니다.
다음은 포인터 변수입니다.
int *a; 와 같이 선언되어 태생부터 포인터만을 저장하겠다고 선언한 변수죠.
이 경우 a는 '&'를 사용하지 않고도 scanf의 인수로 사용될 수 있습니다.
기타 여러가지가 있으나 기사 수준에서는 이정도까지 다루어집니다.
그럼 질문하신 배열'명'이 아닌 배열'요소'는 어떠할까요.
배열요소들의 사용례를 생각해보세요.
a[1]=3;
a[2]=5;
위치값을 저장하고 있는 변수들은 예약어 '*'을 사용해주어야 함에도, 일반 변수처럼 사용되고 있음을 알 수 있습니다.
이 경우 해당 위치의 주소값을 가리키는 '&'를 사용해야 scanf의 인수로 사용할 수 있게됩니다.
행복한 하루되세요 :)
-
관리자2019-08-19 10:10:31
안녕하세요 길벗수험서 운영팀입니다.
정확히 설명드리자면,
함수 scanf의 두 번째 인수는 [메모리 위치값](=포인터)이어야 합니다.
위치값(포인터)을 가리키는 것들에는 먼저 배열'명'이 있습니다.
int a[3]을 선언했다면
'a'라는 이름은 배열의 각 요소(a[0], a[1], a[2])의 시작 위치를 가리키는 포인터의 역할을 합니다.
다음은 위치값을 가리키는 예약어 '&'가 있겠네요.
아시는 바와 같이 일반 변수들 앞에 &를 적어주면 해당 변수가 저장된 메모리 위치인 포인터값을 나타냅니다.
다음은 포인터 변수입니다.
int *a; 와 같이 선언되어 태생부터 포인터만을 저장하겠다고 선언한 변수죠.
이 경우 a는 '&'를 사용하지 않고도 scanf의 인수로 사용될 수 있습니다.
기타 여러가지가 있으나 기사 수준에서는 이정도까지 다루어집니다.
그럼 질문하신 배열'명'이 아닌 배열'요소'는 어떠할까요.
배열요소들의 사용례를 생각해보세요.
a[1]=3;
a[2]=5;
위치값을 저장하고 있는 변수들은 예약어 '*'을 사용해주어야 함에도, 일반 변수처럼 사용되고 있음을 알 수 있습니다.
이 경우 해당 위치의 주소값을 가리키는 '&'를 사용해야 scanf의 인수로 사용할 수 있게됩니다.
행복한 하루되세요 :)