C언어의 문자 배열에 대해서는 이전에 다룬 적이 있다.
[C] C의 문자열, 문자 배열
문자열을 입력받는다고 하였을 때 나는 C에는 파이썬과 같은 것들이 없다고 생각해 반복문을 사용해서 배열[0] 에 문자 하나.. 배열[1] 에 문자 하나.. 이렇게 하곤 했었는데 찾아보니 C에도 문자
cho4u4o.tistory.com
C언어에서 문자열이란 문자 배열에 문자 상수 하나씩 하나씩이 저장되어 있는 상태임을 위의 포스팅에서 언급한 바 있다.
문자 상수와 문자 배열
- 문자 상수
- 작은 따옴표 내에 포함된 하나의 문자 (%c)
- 키보드로 표현할 수 있는 영문자, 숫자, 특수 기호
- 문자 그 자체
- 문자 배열
- 문자 상수를 저장하고 있는 배열
- 배열에 저장된 문자 변경 가능
이렇게 문자 배열에 저장된 문자를 포인터를 통해 접근해보자.
char array1[] = {'A', 'B', 'C', 'D'};
char *p = NULL;
p = array1;
printf("%c %c %c %c \n", p[0], p[1], p[2], p[3]);
printf("%d %d %d %d \n", p[0], p[1], p[2], p[3]);
printf("%c %c %c %c \n", *(p+0), *(p+1), *(p+2), *(p+3));
printf("%d %d %d %d \n", *(p+0), *(p+1), *(p+2), *(p+3));
간단하게 1차원 포인터를 통해 1차원 문자 배열에 접근했다.
위에서는 서식 문자 %c를 통해 문자 상수에 하나씩 접근했다.
서식 문자 %s 를 통한 문자 배열 접근
포인터는 문자열의 시작 주소를 저장하고,
문자열의 특정 문자 위치를 저장한다.
문자열은 메모리 공간에 연속으로 저장되어 있어 주소가 연속적이다.
문자열의 시작 주소를 알면 모든 문자들에 접근 가능하다.
이때 문자열의 일괄 출력은 %s로 가능하다.
%s는 문자열의 시작 주소부터 종료 문자(\0) 을 만날 때까지 문자열을 출력한다.
char* p="ABCD"; // 문자열 상수 ABCD의 시작 주소를 p에 저장
printf("%s ", p);
printf("%s ", p+1);
printf("%s ", p+2);
printf("%s", p+3);
// ABCD BCD CD D
포인터 배열과 문자열
char* p="Good morning";
char* q="C-language";
char* array[2]={"Good morning", "C-language"}; // 포인터 배열 선언
printf("%s \n", p);
printf("%s \n", q);
printf("-----------\n");
printf("%s \n", array[0]);
printf("%s \n", array[1]);
printf("-----------\n");
printf("%s \n", p+5);
printf("%s \n", q+2);
printf("-----------\n");
printf("%s \n", array[0]+5);
printf("%s \n", array[1]+2);
이 개념을 이용해 백준 10798을 풀고 있다.
'C' 카테고리의 다른 글
[C] void형 포인터 (0) | 2023.11.13 |
---|---|
[C] 포인터와 1차원 배열 (0) | 2023.10.26 |
[C] 포인터와 2차원 배열 (0) | 2023.10.26 |
[C] 배열 포인터, 포인터 배열 (0) | 2023.10.26 |
[C] 포인터와 함수 (0) | 2023.10.26 |