안녕하세요 ! 초보개발자 입니다.
이 블로그는 개인 공부 정리용 블로그 입니다.
혹 잘못된 내용이 있다면 지적 부탁드리겠습니다.
그리고 질문주신다면 최대한 아는선에서 답변드리도록 하겠습니다.
그럼 시작하도록 하겠습니다.
포인터와 문자열
문자열은 타입이 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 |
오늘의 강의는 여기서 마치도록 하겠습니다.
수고하셨습니다.
'프로그래밍 > C언어' 카테고리의 다른 글
[C언어] 포인터(10) - 배열과 매개변수 (2) | 2017.05.15 |
---|---|
[C언어] 포인터(9) - 함수와 포인터(값에 의한 호출, 참조에 의한 호출) (1) | 2017.05.11 |
[C언어] 포인터(7) -void 포인터와 NULL (1) | 2017.05.03 |
[C언어] 포인터(6) -[] 연산자 (1) | 2017.04.28 |
[C언어] 포인터(5) - 포인터의 연산 (2) | 2017.04.26 |