본문 바로가기

프로그래밍/C언어

[C언어] 포인터(8) - 포인터와 문자열

안녕하세요 ! 초보개발자 입니다. 

이 블로그는 개인 공부 정리용 블로그 입니다. 

혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.

그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.

그럼 시작하도록 하겠습니다.




포인터와 문자열


문자열은 타입이 char인 배열입니다. 그렇기 때문에 포인터의 타입 또한 char 형이어야 합니다. 


char str = "hello";

  char* strptr = &str;


예제를 통해서 알아 보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<stdio.h>
int main(void) {
 
    char str[] = "hello";
    char *strptr = &str;
 
    printf("str = %s\n", str);
    printf("strptr = %s\n", strptr);
 
    for (int i = 0; i < sizeof(str); i++) {
        printf("strptr[%d] =%c, str[%d]=%c, &str[%d]=%p\n", i,strptr[i],i,str[i],i,&str[i] );
    }
 
    while (*strptr) {
        printf("%c\n"*strptr++);
    }
    return 0;
}
 
cs


먼저 char형 배열 str에 "hello"문자열을 저장 합니다. 그렇다면 배열에는 다음과 같이 저장이 될 것입니다. 



앞선 배열에서 배운 것처럼 문자열 배열에는 마지막에 '\0' 이 저장이 됩니다. 기억이 나지 않으시다면 배열부분을 다시 보시면 좋을 거 같습니다. 

그리고 포인터 strptr에는 str의 주소값을 저장하였습니다. 이제 char형 배열 str의 각 요소를 strptr로도 접근이 가능하게 됩니다. for문에서는 str의 크기만큼 각각의 값들을 출력합니다.  while 문에서는 *strptr의 값이 널문자를 만날때 까지 포인터 *strptr의 값을 증가 시키면서 char 배열에 저장된 값들을 출력합니다.


출력결과는 다음과 같습니다.


str = hello

strptr = hello

strptr[0] =h, str[0]=h, &str[0]=0031FB84

strptr[1] =e, str[1]=e, &str[1]=0031FB85

strptr[2] =l, str[2]=l, &str[2]=0031FB86

strptr[3] =l, str[3]=l, &str[3]=0031FB87

strptr[4] =o, str[4]=o, &str[4]=0031FB88

strptr[5] = , str[5]= , &str[5]=0031FB89

h

e

l

l

o


오늘의 강의는 여기서 마치도록 하겠습니다.


수고하셨습니다.