ChatGPT
"포인터란?"
"포인터는 프로그래밍 언어에서 메모리 주소를 저장하고 참조하는 변수입니다. 메모리 주소는 컴퓨터의 랜덤 액세스 메모리(RAM)에서 데이터 또는 객체의 위치를 가리킵니다. 포인터 변수는 이러한 메모리 주소를 저장하거나 다룰 때 사용됩니다.
포인터의 주요 역할은 다음과 같습니다:
메모리 주소 저장: 포인터는 변수, 배열, 구조체 등의 데이터나 객체의 메모리 주소를 저장합니다.
간접 참조: 포인터를 사용하여 메모리 주소로 이동하고 해당 위치의 데이터를 읽거나 수정할 수 있습니다. 이를 "포인터를 통한 간접 참조"라고 합니다.
동적 메모리 할당: 동적으로 메모리를 할당하고 해제할 때 포인터가 사용됩니다. 동적 메모리 할당을 통해 프로그램 실행 중에 필요한 메모리를 동적으로 할당할 수 있습니다.
배열과 문자열 다루기: 포인터는 배열 요소 또는 문자열의 요소에 접근하는 데 사용됩니다.
함수 포인터: 함수 포인터는 함수의 주소를 저장하고 다른 함수를 호출할 때 사용됩니다."
간단한 예시
int x = 70
int *y = &x
포인터를 사용하여 두 값을 서로 바꾸어 보자.
#include <stdio.h>
void swap(int *x, int *y)
{
int tmp;
tmp = *x; // *x: 포인터 x가 가리키는 값
*x = *y;
*y = tmp;
}
int main(void)
{
int x = 1;
int y = 2;
swap(&x, &y); // &x: x의 주소
printf("x = %d, y = %d", x, y);
return 0;
}
> x = 2, y = 1
포인터 변수의 값을 바꾸어 보자.
#include <stdio.h>
int main(void)
{
int i = 10;
int *p;
p = &i;
printf("i = %d\n", i);
*p = 20;
printf("i = %d\n", i);
retrun 0;
}
> i = 10
> i = 20
포인터 주소에 1을 더해보자.
#include <stdio.h>
int main() {
int numbers[] = {1, 5, 4, 3, 9, 7, 8, 2};
int* p2 = &numbers[0];
printf("p2 Points to %d now. \n", *p2);
return 0;
}
> p2 Points 1 now.
&numbers[0] 대신에 &numbers를 할당해도 출력값은 동일하다. &numbers가 배열의 첫 번째 요소의 주소를 나타내는 포인터로 취급되기 때문이다.📙 참고