포인터는 메모리 주소를 저장하고, 해당 주소에 저장된 값에 접근하는 데 사용된다. 이를 활용하면 메모리에 효율적으로 접근 가능하고 어디서든 변수의 값을 조작할 수 있다.
메모리 주소를 저장하는 변수로, 해당 주소에 있는 값에 직접 접근할 수 있다. 포인터 변수를 선언할 때는 변수 이름 앞에 *를 붙인다
ex: int *ptr;
주소 연산자&는 변수의 주소를 구하는 데 사용된다. 변수 이름 앞에 붙여 사용한다.
ex: int num = 10; int *ptr = #
역참조 연산자*는 포인터가 가리키는 주소에 저장된 값을 가져오는 데 사용된다. 변수 이름 앞에 붙여 사용한다.
ex: int value = *ptr;
포인터 변수를 증가 또는 감소시켜 다음 또는 이전 주소로 이동할 수 있다. 예를 들어 arr 배열 변수의 주소를 할당한 포인터 변수라면, 해당 배열의 인덱스에 있는 값을 순차적으로 접근할 수 있다.
ex: ptr++; ptr--;
배열은 포인터로 암시적으로 변환될 수 있으며, 포인터 또한 배열로 변환될 수 있다. 배열의 이름은 포인터 상수로 간주되므로 배열을 가리키는 포인터로 사용이 가능하다.
ex : arr[i] == *(arr + i)
포인터 배열은 포인터 요소의 배열이며, 배열 포인터는 배열을 가리키는 포인터다. 둘은 서로 다른 개념이며 각각의 용도와 특징을 잘 파악해야된다.
ex : 포인터 배열
int *arr[3] = {&num1, &num2, &num3};
ex : 배열 포인터
int arr[3] = {1, 2, 3};
int *ptr; = arr;
int num = 100;
// 정수형 num 변수의 값을 100 할당
int *ptr = #
// num 변수의 주소를 ptr에 할당
printf("%d\n", *ptr);
// ptr에 저장된 주소 값을 역참조하여 num 변수의 값 출력 100
int array[3] = {1, 2, 3};
// 정수형 array 배열 변수의 값을 1, 2, 3 할당
int* ptr = array; // &array[0]; 같은 의미
// 배열의 첫 번째 요소 주소를 ptr에 할당
printf("%d\n", *ptr);
// ptr에 저장된 주소 값을 역참조하여 배열의 첫 번째 요소 값 출력 1
int number = 100;
int* ptr = &number; // 포인터
int** dptr = &ptr; // 더블 포인터
int*** tptr = &dptr; // 트리플 포인터
포인터가 가리키는 주소에 저장된 값을 가져오는 작업을 의미한다.
배열에 각각 접근 가능한 값들을 의미한다. 배열은 연속적으로 메모리에 할당된 요소들의 집합이며, 각 요소는 인덱스를 갖고 있다. 인덱스란 요소들을 식별하기위한 숫자(상수)다.
배열에서의 위치를 가리키는 숫자를 인덱스라고 표현한다.
2023년 5월 23일: 포인터와 배열의 상호 변환, 포인터 배열과 배열 포인터 내용 추가
2023년 5월 28일: arr -> array 오타 수정