문자열
C에는 문자열이 없고, string 자료형이 내부적으로 구현되어있는데 이는 char의 배열로 이루어져있다.
string은 아래와 같이 사용하고, 저장된다.
string s = "Hello"
| H | e | l | l | o | \0 |
- 이 코드에서 s는 "Hello"가 시작하는 첫 글자인 H가 위치한 메모리주소를 주소값으로 갖는다.
- s는 첫 글자가 저장된 메모리 주소를 가지고 있고, 널이 나올 때 까지 루프를 돈다
- 즉 문자열은 포인터변수라고 보면 된다.
typedef char *string;
- String은 내부적으로 char의 포인터 변수로 정의 되어있으며, 라이브러리를 사용하지 않는다면 아래와 같이 사용할 수 있다.
char *s = "hello";
char[6] s = {'h','e','l','l','o','\0'};
문자열 포인터
# include <stdio.h>
int main() {
char *a = "hello";
printf("%s\n", a);
printf("%p\n",a); // 포인터 a가 가진 값 ->"hello"의 h가 저장된 주소
printf("%p\n",&(*a)); // a가 가지고있는 값(h)의 주소 -> "hello"의 h가 저장된 주소
printf("%p\n", &a); // 포인터 변수 a의 주소
printf("================================\n");
int b = 10;
int *p = &b;
printf("%p\n",p); // 포인터 p가 가진 값 -> b의 주소
printf("%p\n",&b); // b의 주소
printf("%p\n",&p); // 포인터 변수 p의 주소
}

문자열 swap
- 문자열 Hello와 Hyeji를 가리키는 포인터변수 a와 b 생성
- swap함수 사용을 위해 각 문자열의 시작주소가 저장되어있는 a와 b의 주소값을 넘긴다.
- 매개변수로 각 문자열이 저장된 포인터의 주소를 전달했으므로 인자 값을 받을 때 이중포인터로 받아야한다.
# include <stdio.h>
void swap(char **a, char **b) {
char *tmp = *a; // 이중포인터 a가 가지고있는 값 (hello의 시작 h 주소)를 tmp에 넣기
*a = *b; // a값을 hyeji 시작주소로 변경
*b = tmp; // b의 값 (hyeji의 시작주소)에 tmp값 (hello의 시작주소 h) 넣기
}
int main() {
char *a = "Hello";
char *b = "Hyeji";
swap(&a, &b);
printf("%s %s",a,b);
}
'Automotive > C' 카테고리의 다른 글
| [C/C++] 포인터 배열 및 복잡한 함수 포인터 (7) | 2024.09.10 |
|---|---|
| [C/C++] Pointer 및 Const (1) | 2024.07.24 |