본문 바로가기
C언어/C 언어 중급

중급2강_C언어 포인터와 배열, 문자열 완전 이해하기 – 메모리 접근의 핵심 원리!

by AI쌤 2025. 4. 20.
반응형

✅ C언어 포인터와 배열, 문자열 완전 이해하기 – 메모리 접근의 핵심 원리!

포인터를 이해했다면, 이제 배열과 포인터의 관계, 그리고 **문자열(char 배열)**을 포인터로 다뤄보는 실력을 키울 차례입니다.
이번 강의에서는 C언어의 배열 구조, 포인터 접근 방식, 그리고 문자열 처리 기초까지 꼼꼼하게 다뤄봅니다.


🧠 배열과 포인터는 어떤 관계일까?

C언어에서 배열 이름은 포인터처럼 사용될 수 있습니다.

 
int arr[3] = {10, 20, 30};
int *p = arr;
printf("%d\n", p[0]);        // 10

✅ arr == &arr[0] → 배열 이름은 첫 번째 요소의 주소
✅ p[i] == *(p + i) → 포인터로 배열처럼 접근 가능


📍 포인터를 이용한 배열 순회

 
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
for (int i = 0; i < 5; i++)
{
      printf("%d ", *(p + i));
}

✅ 포인터 산술 연산을 활용해 배열 순회


🧵 문자열과 포인터

문자열은 C언어에서 문자 배열로 저장됩니다.
문자열 리터럴은 문자형 포인터로 표현 가능합니다.

 
char str[ ] = "Hello";
char *p = "World";
표현설명
char str[ ] = "Hello"; 문자열을 배열에 저장 (수정 가능)
char *p = "World"; 문자열 상수를 가리킴 (수정 ❌)

📌 문자열 출력 예시

char str[ ] = "Coding";
char *p = str;
for (int i = 0; p[i] != '\0'; i++) 
{
      printf("%c", *(p + i));
}

✅ 널 문자 '\0'는 문자열의 끝을 나타냄


✍ 문자열 입력 예제

 
char name[20];
printf("이름을 입력하세요: ");
scanf("%s", name);
printf("안녕하세요, %s님!\n", name);
 

✅ 문자열 입력 시 scanf()는 공백 전까지 입력
✅ 공백 포함 입력은 fgets(name, sizeof(name), stdin); 사용


🔧 문자열 관련 표준 함수 (string.h)

함수설명
strlen(str) 문자열 길이 반환
strcpy(dest, src) 문자열 복사
strcat(dest, src) 문자열 연결
strcmp(s1, s2) 문자열 비교

✅ 사용 전 #include <string.h> 필수


🛠 실전 예제: 문자열 비교기

#include <stdio.h>
#include <string.h>
int main()
{
     char pw1[20], pw2[20];
 
     printf("비밀번호 입력: ");
     scanf("%s", pw1);
     printf("비밀번호 재입력: ");
     scanf("%s", pw2);
 
     if (strcmp(pw1, pw2) == 0)
         printf("일치합니다.\n");
     else printf("불일치합니다.\n");
     return 0;
}

🎯 실습 과제

  1. 포인터를 이용해 정수 배열 요소들을 출력하세요.
  2. 문자열 입력받고 길이를 출력하는 프로그램 작성
  3. 포인터를 이용해 문자열을 뒤집어 출력하기

💡 핵심 요약

  • 배열 이름은 주소값 → 포인터처럼 사용 가능
  • 포인터 산술 연산으로 배열 접근 가능
  • 문자열은 char 배열로 구성됨
  • 문자열 관련 함수는 string.h에 포함됨

🗣 다음 주 예고: 동적 메모리 할당 – malloc, free 등 실전 포인터 활용법!

이제 포인터와 배열, 문자열까지 다뤘다면
다음은 런타임에 메모리를 할당하고 해제하는 기술,
동적 메모리 할당을 배울 차례입니다.

어 #배열과포인터 #문자열처리 #string함수 #C언어중급 #C언어배열 #C언어포인터 #프로그래밍기초

반응형