포인터
- 변수의 주소를 저장하는 변수다
- 포인터는 가리킬 변수의 형, '*', 포인터 이름 순으로 선언한다
- 포인터 앞에 '*'를 입력하면 포인터가 가리키는 변수의 값을 나타낸다 *ptr_a == a
- 포인터에 1을 더하면 포인터 주소에 지정된 형의 크기만큼 더해진다 int의 포인터면 4가 더해진다
- 배열에서 포인터에 1을 더하면 다음 원소를 가리킨다 &a[0] + 1 = &a[1]
주의 변수의 주소는 상황마다 달라질 수 있으므로 절대적인 값을 가지지 않는다
ex) int a = 20;
int *ptr_a;
ptr_a = &a; 위의 2줄을 int *ptr_a = &a로 구현 가능하다
*ptr_a = 10; a의 값이 10이 된다
배열과 포인터 관계 정리
- ptr == &ptr[0]
- *ptr == ptr[0]
- ptr + 1 == ptr에 sizeof(*ptr)을 더한 값 sizeof(*ptr)은 ptr이 가리킨 변수의 크기
- *(ptr + i) == ptr[i] == i[ptr] C언어는 a[b]를 실행할 때 *(a + b)로 실행한다
배열 포인터
- 배열을 가리키는 포인터 배열 전체를 가리킨다
- 배열 포인터는 가리킬 변수의 형, (*포인터 이름), [] 순으로 선언한다
ex) int(*ptr_arr)[3]; 길이 3인 int형 배열을 가리키는 포인터를 선언
배열 포인터
- 포인터들을 값으로 가진 배열
- 배열 포인터는 가리킬 변수의 형, *포인터 이름, [] 순으로 선언한다
ex) char strings[3][10] = {"Hello", "World", "Doodle"};
char *p_str[3];
for (int i = 0; i < 3; i++) {
print("%s\n", &strings[i][0]); &strings[i][0] == strings[i] 이므로 print("%s\n", strings[i]);로 써도 된다
}
for (int i = 0; i < 3; i++) {
p_str[i] = strings[i];
}
for (int i = 0; i < 3; i++) {
print("%s\n", p_str[i]); p_str[i]는 strings[i][0]의 주소값과 같다
}
'Study > C C++' 카테고리의 다른 글
[두들낙서] 구조체 (0) | 2021.03.01 |
---|---|
[두들낙서] 함수 (0) | 2021.03.01 |
[두들낙서] 배열 (0) | 2021.02.28 |
[두들낙서] 반복문 (0) | 2021.02.28 |
[두들낙서] 조건문 (0) | 2021.02.26 |