이 영역을 누르면 첫 페이지로 이동
시간의화살 블로그의 첫 페이지로 이동

시간의화살

페이지 맨 위로 올라가기

시간의화살

행복하세요

[C] 문자열과 포인터

  • 2022.04.01 15:50
  • Programming Language/C

 

 

 

지난번에 배웠듯 C에서 문자열을 표현할 때는 char타입의 배열을 사용해 마지막에 null (\0)문자를 붙이는 것으로 표현할 수 있다.

 

그런데 포인터 변수로도 배열을 표현할 수 있다면, 문자열도 포인터 변수로 표현할 수 있지 않을까?

 

 

 

 

표현할 수 있다.

 

하지만 첫 번째 방법과 두 번째 방법은 차이점이 있다.

 

char * s1 = "your team"; 처럼 포인터 변수를 사용해 문자열을 표현하면, 문자열을 새로 할당하는 것도 가능하고, 문자열이 아니라 char의 주소를 할당하는 것도 가능하지만, 문자열의 일부분을 인덱스를 통해 변경하려고 하면 오류가 발생한다. 

 

이는 자동 할당된 문자열에 대한 규칙으로 받아들여야 한다.

 

char타입의 배열로 문자열을 선언하게 되면 아까와는 반대되는 상황이 발생한다.

 

배열 이름은 지정 연산 왼쪽에 올 수 없어 배열에 문자열을 할당하는 건 불가능하지만, 배열의 인덱스를 통해 값을 조작하는건 가능하다.

 

 

자동 할당 문자열에 대해 좀 더 알아보자.

 

 

 

char배열을 통해 문자열을 선언하는 경우 외의 모든 경우를 자동 할당 문자열로 취급한다.

 

위의 예시를 보면, 문자열이 먼저 할당된 다음 문자열이 할당된 위치의 주소 값을 반환한다.

 

 

 

포인터 배열

 

 

 

배열에다가 각 요소들의 주소를 저장하는, 즉 포인터의 배열을 사용하게 되는 경우도 있다.

 

이 때 주소의 크기는 4바이트로 설정하고, 저장할 때는 &연산자로 요소의 주소를 저장한다.

 

 

 

읽어올 때는 *연산자로 주소의 값을 읽어온다.

 

 

포인터 배열은 문자열을 배열로 묶어서 처리할 때 사용된다.

 

char * arr[3] = {"abc","def"};

printf("%s", arr[0]); // abc
printf("%s", arr[1]); // def

 

문자열의 시작 주소를 가지고 있으면 문자열을 가지고 있다고 볼 수 있으니..

 

char[]  = "Hello";
char * p[]  {a, a+1, a+2}; // "Hello", "ello", "llo" . 문자열의 끝은 \0 널문자가 알려주니까.

 

 

문자열을 복사하는 함수로 strcpy가 있다. (string copy)

 

char * strcpy(char * s1, const char *s2){
	char *s = s1;
    while(*s++ = *s2++);
    return s1;
}

 

 

반응형

'Programming Language > C' 카테고리의 다른 글

[C] Call By Value  (0) 2022.04.13
[C] 포인터와 함수  (0) 2022.04.13
[C] 포인터 연산  (0) 2022.04.01
[C] 배열과 포인터  (0) 2022.04.01
[C] 포인터  (0) 2022.03.28

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [C] Call By Value

    [C] Call By Value

    2022.04.13
  • [C] 포인터와 함수

    [C] 포인터와 함수

    2022.04.13
  • [C] 포인터 연산

    [C] 포인터 연산

    2022.04.01
  • [C] 배열과 포인터

    [C] 배열과 포인터

    2022.04.01
다른 글 더 둘러보기

정보

시간의화살 블로그의 첫 페이지로 이동

시간의화살

  • 시간의화살의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (607)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • Java (19)
      • JavaScript (15)
      • C (25)
      • C++ (12)
      • Python (1)
      • PHP (2)
    • Computer Science (69)
      • Operating System (18)
      • Computer Network (17)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Github Actions (0)
      • Amazon Web Service (8)
    • Machine Learning (28)
      • AI Introduction (28)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • Solutions (14)
    • Life Logs (0)
    • 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈

정보

13months의 시간의화살

시간의화살

13months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © 13months.

티스토리툴바