포인터


포인터란?

메모리의 주소값을 저장하는 변수

  • 주소 연산자(&) : 해당 변수의 메모리 시작 주소값을 반환, (&: ampersand) (~의 주소)
  • 간접 참조 연산자(*) : 선언된 포인터 변수가 가리키는 변수를 구함 (~의 값)
  • 포인터(*) : 주소를 저장하고 있는 변수, 포인터 변수 선언할 때 사용
1
2
3
4
5
6
int x = 7; // 변수 선언
int *ptr = &x; // 포인터 선언
printf("%d\n", *ptr);  // output >>> 7

int **pptr = &ptr; // 포인터 참조
printf("%d\n", **pptr); // output >>> 7
  • 포인터 변수 ptr이 x를 가리키고 있음.

예제

1
2
3
4
5
6
7
8
9
10
int num1 = 1234;
double num2 = 3.14;
int* ptr_num1 = &num1;
double* ptr_num2 = &num2;

printf("ptr_num1의 크기 : %d\n", sizeof(ptr_num1));
printf("ptr_num1이 가리키고 있는 주소값 : %#x\n", ptr_num1);
printf("ptr_num2가 가리키고 있는 주소값 : %#x\n", ptr_num2);
printf("ptr_num1이 가리키고 있는 주소에 저장된 값 : %d\n", *ptr_num1);
printf("ptr_num2이 가리키고 있는 주소에 저장된 값 : %f\n", *ptr_num2);
1
2
3
4
5
6
// output
ptr_num1 크기 : 8
ptr_num1 가리키고 있는 주소값 : 0x9a55df4
ptr_num2 가리키고 있는 주소값 : 0x9a55de8
ptr_num1 가리키고 있는 주소에 저장된  : 1234
ptr_num2 가리키고 있는 주소에 저장된  : 3.140000

포인터의 연산

1
2
3
4
5
6
7
8
9
10
#include <stdio.h>

int main(){
    int arr[5] = {1, 2, 3, 4, 5};
    int *ptr1, *ptr2, *ptr3;

    ptr1 = arr; // 포인터에 주소 대입
    ptr2 = &arr[2]; // 포인터에 주소 대입

}

test. ing.

Leave a comment