일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 노마드코더
- popupmenubutton
- 포인터
- removetooltip
- 건대입구맛집
- 정렬알고리즘
- richtext
- 상속
- 부스트코스
- 장고
- 코딩독학
- 아스키코드
- python3
- Django
- 추상클래스
- 가상환경
- 성수동카페
- BeautifulSoup
- 알고리즘
- 자바
- 강원도속초맛집
- DOM
- Python
- JavaScript
- 남양주맛집
- pipenv
- c언어문자열
- 컴퓨터과학
- FLUTTER
- 속초여행
- Today
- Total
YUYANE
C / 포인터와 문자열 본문
학습 강의
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'을 널 종단 문자라고 부른다.
char *를 이용해서 문자열 저장하기
- 지난 번 포스팅을 참고하면 이해가 더 쉽다. (1y9u9j2in.tistory.com/171)
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
문자열의 끝을 알리는 값(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' 다음의 문자를 읽을 수 있다.
'Programming Languages > C' 카테고리의 다른 글
C / malloc() 과 free() (0) | 2021.02.23 |
---|---|
C / 16진법과 메모리 주소(&연산자, 포인터) (0) | 2021.02.15 |
C / 명령행 인자 ( command line argument) (0) | 2021.01.26 |
C / 컴파일 과정에 대해서 (0) | 2021.01.25 |
C / 포인터 사용하기 (코드리뷰) (0) | 2021.01.22 |