반응형
문자열
아래와 같이 s에 “EMMA”라는 값을 저장한다고 생각해 보자.
String str = "COMPUTER";
문자열은 결국 문자의 배열이고, str[0], str[1], str[2], … 와 같이 하나의 문자가 배열의 한 부분을 나타낸다.
가장 마지막의 \0은 0으로 이루어진 바이트로, 문자열의 끝을 표시하는 약속이다.
변수 str은 결국 이러한 문자열을 가리키는 포인터가 된다.
#include <stdio.h>
int main(void)
{
char *s = "COMPUTER";
printf("%s\n", s);
}
결과)
COMPUTER
char 포인터를 이용해 문자열을 출력할 수 있다.
문자열 비교
#include <stdio.h>
int main(void)
{
char *s = "EMMA";
printf("%p\n", s);
}
위 코드를 실행하면, s라는 포인터의 값, 즉 “EMMA”라는 문자열의 가장 첫 값인 “E”에 해당하는 메모리 주소를 출력한다.
printf("%p\n", &s[0]);
printf("%p\n", &s[1]);
printf("%p\n", &s[2]);
printf("%p\n", &s[3]);
결과)
0x55652d87d004
0x55652d87d005
0x55652d87d006
0x55652d87d007
위 코드는 "EMMA"라는 문자열의 문자 하나 하나의 주소값을 출력한다.
문자열을 비교할 때는 문자열이 저장된 변수를 바로 비교하게 되면 그 변수가 저장되어 있는 주소가 다르기 때문에 다르다는 결과가 나온다.
#include <stdio.h>
int main()
{
char *s = "s";
char *t = "t";
if (s == t)
{
printf("Same\n");
}
else
{
printf("Different\n");
}
}
결과)
Different
출처
https://www.boostcourse.org/cs112/lecture/119032/?isDesc=false
반응형
'Programming > 온라인 교육' 카테고리의 다른 글
[중고거래장터 - 6] setter 대신 빌더 패턴 사용 / Controller와 Service 계층의 역할 분리 (2) | 2022.02.24 |
---|---|
[CS50] 메모리 구조 (0) | 2021.12.06 |
[CS50] 포인터 (0) | 2021.12.06 |
[CS50] 메모리 (0) | 2021.12.06 |
[CS50] 알고리즘 (0) | 2021.12.03 |