포인터와 배열에 대한 C 언어 강의
안녕하세요, 야심찬 프로그래머 여러분! 오늘 우리는 C 언어의 포인터와 배열에 대한 흥미로운 여정을 시작할 것입니다. 이 용어들이 두려울 수 있지만, 이 튜토리얼이 끝나면 프로처럼 다루게 될 것입니다!
C 언어의 배열
먼저 배열에 대해 알아보겠습니다. 상상해보세요. 여러 대의 장난감 자동차가 있어요. 방에 흩어져 있던 것을 정리하여 선반에 고스란히 정렬한 것처럼, 배열은 프로그래밍에서 여러 개의 동일한 유형의 아이템을 유기적으로 저장하는 방법입니다.
배열 선언
C에서 배열을 선언하는 방법은 다음과 같습니다:
int numbers[5];
이 코드는 numbers
라는 이름의 배열을 만들어 5개의 정수를 저장할 수 있게 합니다. "5개의 장난감 자동차를 수용할 수 있는 선반을 원한다"는 것과 같은 말입니다.
또한 배열을 값을 초기화하여 선언할 수 있습니다:
int numbers[5] = {1, 2, 3, 4, 5};
이것은 5개의 특정 장난감 자동차를 선반에 바로 올리는 것과 같습니다.
다음은 더 구체적인 예제입니다:
#include <stdio.h>
int main() {
int scores[5] = {85, 92, 78, 95, 88};
printf("세 번째 점수는: %d\n", scores[2]);
return 0;
}
이 예제에서 우리는 5개의 시험 점수를 저장하고 있습니다. scores[2]
를 사용하여 세 번째 점수에 접근하는 것을 주목하세요. C에서 배열 인덱싱은 0부터 시작하며, 1부터 시작하는 것이 아니라는 점을 기억하세요. 이는 일부 나라에서 지하 1층이 0층으로 간주되는 것과 같은 원리입니다.
C 언어의 포인터
이제 포인터에 대해 이야기해보겠습니다. 배열은 선반이라면, 포인터는 그东西이 저장된 위치를 가리키는 레이블이나 표지입니다.
포인터는 다른 변수의 메모리 주소를 저장하는 변수입니다. 그东西이 어디에 있는지 정확히 알려주는 지도와 같습니다.
포인터를 선언하는 방법은 다음과 같습니다:
int *ptr;
이 코드는 정수의 주소를 저장할 수 있는 포인터 ptr
를 만듭니다.
간단한 예제를 보겠습니다:
#include <stdio.h>
int main() {
int x = 10;
int *ptr = &x;
printf("x의 값은: %d\n", x);
printf("x의 주소는: %p\n", (void*)ptr);
return 0;
}
이 예제에서 우리는 정수 x
와 x
의 주소를 저장하는 포인터 ptr
를 만듭니다. &
연산자는 변수의 주소를 가져옵니다.
C 언어의 해제 연산자
해제 연산자 *
는 포인터가 가리키는 주소에 저장된 값을 접근하는 데 사용됩니다. 그东西이 저장된 위치로 가서 무엇이 있는지 확인하는 것과 같습니다.
다음은 예제입니다:
#include <stdio.h>
int main() {
int x = 10;
int *ptr = &x;
printf("x의 값은: %d\n", x);
printf("ptr이 가리키는 값은: %d\n", *ptr);
*ptr = 20; // 포인터를 통해 x의 값을 변경
printf("x의 새로운 값은: %d\n", x);
return 0;
}
이 예제에서 우리는 *ptr
를 사용하여 x
의 값을 접근하고 변경합니다.
포인터와 배열
이제 정말 흥미로운 부분입니다. C에서는 포인터와 배열 간에 밀접한 관계가 있습니다. 사실, 배열의 이름은 그东西의 첫 번째 요소를 가리키는 포인터입니다!
예제를 보겠습니다:
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
int *ptr = numbers; // ptr이 numbers의 첫 번째 요소를 가리킵니다
for(int i = 0; i < 5; i++) {
printf("요소 %d: %d\n", i, *ptr);
ptr++; // 다음 요소로 이동
}
return 0;
}
이 예제에서 우리는 배열과 포인터를 만들고, 포인터를 사용하여 배열의 각 요소를 출력합니다.
주의할 점
C에서 포인터와 배열에 대해 기억해야 할 중요한 점을 몇 가지 정리하겠습니다:
포인트 | 설명 |
---|---|
배열 인덱싱 | C에서 배열 인덱싱은 0부터 시작합니다 |
포인터 선언 | 포인터를 선언할 때 * 를 사용합니다 (예: int *ptr; ) |
주소 연산자 | 변수의 주소를 가져오기 위해 & 를 사용합니다 |
해제 연산자 | 포인터가 가리키는 값을 접근하기 위해 * 를 사용합니다 |
배열-포인터 관계 | 배열의 이름은 그东西의 첫 번째 요소를 가리키는 포인터입니다 |
포인터 연산 | 포인터에 1을 더하면 그东西의 타입의 다음 요소로 이동합니다 |
포인터를 다루는 것은 세심한 주의가 필요합니다. 강력한 기능이지만, 큰 책임도 따릅니다!
이 튜토리얼이 포인터와 배열에 대한 오해를 풀어드렸기를 바랍니다. 계속 연습하면 곧 진정한 C 프로그래머처럼 메모리를 조작하게 될 것입니다! 행복하게 코딩하세요!
Credits: Image by storyset