YUYANE

C / 포인터와 문자열 본문

Programming Languages/C

C / 포인터와 문자열

YUYA 2021. 2. 16. 10:38

학습 강의

 

www.boostcourse.org/cs112/lecture/119029

www.boostcourse.org/cs112/lecture/119030

 

 

문자열

 

C언어에는 따로 문자열(string) 자료형이 없다. 대신에 문자(char)의 배열로 나타낸다. 아래와 같이 문자열을 변수에 담아보자. (우선은 편의상 자료형을 string이라고 했다.)

 

string s = "EMMA";

 

문자열은 문자의 배열이기 때문에 s[0], s[1],..와 같이 문자 하나하나를 나타낼 수도 있다. 한 가지 유의할 것은 문자열 끝에 '\0'을 표시함으로써 문자열의 끝을 알린다는 것이다. 여기서 '\0'을 널 종단 문자라고 부른다.

 

네이버 부스트코스, 모두를 위한 컴퓨터 과학(CS50)

 

 

char *를 이용해서 문자열 저장하기

 

- 지난 번 포스팅을 참고하면 이해가 더 쉽다. (1y9u9j2in.tistory.com/171)

 

C / 16진법과 메모리 주소(&연산자, 포인터)

학습 강의 www.boostcourse.org/cs112/lecture/119027 www.boostcourse.org/cs112/lecture/119028 16진법의 유용성 - 컴퓨터의 메모리와 파일(이미지 등)을 만들거나 수정할 때 컴퓨터나 휴대폰 속 메모리의 위치..

1y9u9j2in.tistory.com

 

char *s = "EMMA";
printf("%s\n",s); // 출력 결과 : EMMA

 

C에서 문자열은 'char *'를 사용하여 선언한다. 여기서 변수 's'는 문자(char)에 대한 포인터가 되고, "EMMA"라는 문자열의 가장 첫번째 문자의 주소(s[0])를 저장한다.

 

위의 코드에서 첫 번째 문자 'E'만이 아닌, 문자열 전체가 출력되는 이유는 printf의 형식지정자 '%s' 때문이다. '%s'를 지정하면, s가 가리키는 주소('E'의 주소)부터 널 종단 문자까지의 주소를 모두 읽어 값을 반환한다.

 

char *s = "EMMA";
printf("%p\n",s); //출력결과 : 0x42ab52
printf("%p\n",&s[0]); //출력결과 : 0x42ab52
printf("%p\n",&s[1]); //출력결과 : 0x42ab53
printf("%p\n",&s[2]); //출력결과 : 0x42ab54
printf("%p\n",&s[3]); //출력결과 : 0x42ab55

 

 

C / 16진법과 메모리 주소(&연산자, 포인터)

학습 강의 www.boostcourse.org/cs112/lecture/119027 www.boostcourse.org/cs112/lecture/119028 16진법의 유용성 - 컴퓨터의 메모리와 파일(이미지 등)을 만들거나 수정할 때 컴퓨터나 휴대폰 속 메모리의 위치..

1y9u9j2in.tistory.com

 

문자열의 끝을 알리는 값(s[4])가 존재하기 때문에, '\0'의 주소까지 읽을 수 있다. 각 문자의 주소값은 1바이트씩 차이가 나는데, 각각의 주소를 방문하여 읽어낸 문자를 조합한 것이 문자열인 것이다. 

 

    char *s = "EMMA";
    printf("%c\n",*s); //E
    printf("%c\n",*(s+1));//M
    printf("%c\n",*(s+2));//M
    printf("%c\n",*(s+3));//A

 

배운 내용을 정리하자면 s는 문자'E'의 주소를 가리키는 포인터이기 때문에, s 주소 값에 1씩 더하면 'E' 다음의 문자를 읽을 수 있다.

 

 

Comments