04. 포인터와 문자열

2025. 6. 26. 12:01·프로그래밍 언어/C

🧠 포인터와 문자열

  • 🧩 포인터는
    • 32비트 시스템에서는 4바이트를 가지며,
    • 64비트 시스템에서는 8바이트 크기를 가진다.
  • 🧵 문자열(String)은 끝에 '\0'이라는 널 문자(null character)를 포함한다.
  • 🔒 포인터가 가리키는 값은 변경 가능하지만, 배열 이름은 포인터 상수이기 때문에 그 값을 변경할 수 없다.

🔍 문자열 선언 방식의 차이

🧱 배열 방식

char str1[] = "My string"; // str1은 포인터 상수 (주소 값 변경 X)
char * const str2 = str1;  // 위와 동일
  • 📦 문자열 "My string"이 배열로 복사되어 저장됨
  • str은 배열 이름이며, 해당 문자열 데이터를 직접 포함
  • ✅ 각 문자는 수정 가능 (예: str[0] = 'm';)
  • ❌ str은 포인터 상수이므로 str = 다른주소; 는 불가능

🧭 포인터 방식

const char *str1 = "Your String";     // 상수를 가리키는 포인터
char const *str2 = "Your String";     // 위와 동일
  • 🎯 str은 문자열의 시작 주소('Y')를 가리키는 포인터
  • ✅ 주소 변경 가능 (예: str = "Another";)
  • ❌ 문자열 자체는 수정 불가능
    (예: str[0] = 'y'; → 정의되지 않은 동작 / Segmentation Fault 가능)

🔐 상수를 가리키는 포인터 상수

const char * const str1 = "Your String";     // 상수를 가리키는 포인터 상수
char const * const str2 = "Your String";     // 위와 동일
  • ❌ 가리키는 주소 변경 불가능
  • ❌ 가리키는 값도 변경 불가능

📤 함수 인자로서의 사용

void printStr(char *str) {
    printf("%s", str);
}
  • 문자열은 함수 인자로 넘길 때 보통 char* 타입을 사용
  • char str[]도 함수 인자에서는 암묵적으로 char*로 변환됨

✅ 요약

구분 주소 변경 값 변경 설명
🧱 char str[] = "abc" ❌ 불가능 ✅ 가능 배열로 선언, 문자열이 복사되어 포함됨
🧭 char *str = "abc" ✅ 가능 ❌ 불가능 리터럴 가리킴, 값 변경 시 오류 발생 가능
🔐 const char * const str = "abc" ❌ 불가능 ❌ 불가능 주소와 값 모두 상수
📤 함수 인자 char* str ✅ 가능 ✅ 가능 보통 문자열 인자로 사용

'프로그래밍 언어 > C' 카테고리의 다른 글

06. 구조체 (Struct)  (0) 2025.06.30
05. 함수 포인터 (Function pointer)와 void 포인터  (0) 2025.06.27
03. 자료형 변환 (Type casting)  (0) 2025.06.24
02. 상수(Constant)  (0) 2025.03.31
01. 실수 표현 (고정 소수점과 부동 소수점)  (0) 2025.03.31
'프로그래밍 언어/C' 카테고리의 다른 글
  • 06. 구조체 (Struct)
  • 05. 함수 포인터 (Function pointer)와 void 포인터
  • 03. 자료형 변환 (Type casting)
  • 02. 상수(Constant)
coding-l7
coding-l7
  • coding-l7
    coding-l7rl0
    coding-l7
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 기타
      • 유니티
        • OfficeWorkerRunning
      • 프로그래밍 언어
        • C
        • C#
        • C++
      • CS
        • 컴퓨터 구조
        • 운영체제
      • 물리 기반 시뮬레이션
        • 기초
        • Cloth Simulation
        • Fluid Simulation
      • 코딩 테스트
        • 프로그래머스
        • 백준
      • 독서
        • [ 뇌를 자극하는 윈도우즈 시스템 프로그래밍 ]
        • [ 혼자 공부하는 컴퓨터 구조 + 운영체제 ]
        • [ CUDA 기반 GPU 병렬 처리 프로그래밍 ]
      • 영어
        • Basic Grammar In Use
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 깃허브
    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    OpenGL
    컴퓨터 구조
    파동 난류
    surface turbulence
    GLSL
    RAM
    position based dynamics
    정수 승격
    시스템 프로그래밍
    screen space fluid rendering
    실수
    wave simulation
    유체 시뮬레이션
    그리드 기반 방법
    입자 기반 방법
    Flip
    fluid implicit particle
    물리 기반 시뮬레이션
    collision
    narrow range filter screen-space fluid rendering
    명령어
    pbd
    액체 시뮬레이션
    상수
    C언어
    jump table
    fluid simulation
    screen-space rendering
    bilateral blur
    cloth simulation
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
coding-l7
04. 포인터와 문자열
글쓰기
상단으로

티스토리툴바