7장 해설
1분 퀴즈
1. ④
해설_ 세 친구 모두 포인터를 올바르게 이해하고 있습니다.
2. ②
해설_ 포인터 변수 p는 변수 a의 메모리 주소를 저장하고 있습니다. 포인터 변수 앞에 *를 붙이면 포인터 변수가 저장한 주소의 값에 접근할 수 있으므로 15가 출력됩니다.
3. ④
해설_ 포인터 변수 ptr은 arr 배열의 시작 주소를 가집니다. 그래서 ptr[2]에 4를 넣으면 arr 배열의 인덱스 2에 해당하는 값인 3을 4로 바꿉니다. 그러므로 arr[2]와 ptr[2] 모두 4가 출력됩니다.
4. ②
해설_ 두 변수의 주소를 함수로 전달해야 하므로 변수 앞에 &를 붙입니다.
셀프체크
#include <stdio.h>
void square(int * ptr); // 함수 선언
int main(void) {
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // 배열 선언 및 초기화
for (int i = 0; i < 10; i++) {
square(&arr[i]); // 함수 호출 : 배열 각 요소의 메모리 주소 전달
}
for (int i = 0; i < 10; i++) {
printf("%d", arr[i]); // 변경된 배열의 각 요소 출력
if (i + 1 < 10) { // 다음 요소가 남아 있는 경우에만 쉼표(,) 출력
printf(", ");
}
}
printf("\n");
return 0;
}
void square(int * ptr) { // 함수 정의 : 값이 짝수인 경우 제곱으로 변경
if (*ptr % 2 == 0) { // 나머지 연산자로 짝수인지 확인
// *ptr = *ptr * *ptr;
// 같은 문장이지만 가독성을 위해 괄호 처리
*ptr = (*ptr) * (*ptr); // 메모리 주소 값의 제곱으로 변경
}
}