[C언어] 포인터 연산

ET의 공부/C언어|2021. 1. 3. 22:27

포인터 선언

int *i_ptr; //포인터 선언

 

포인터에 값 넣기

    int test_num = 5;
    int *i_ptr; //포인터 선언
    i_ptr = &test_num;
    printf("%p\n",i_ptr);
    //0x7ffeefbff5c8

 

포인터 주소 얻기

포인터 변수도 주소를 갖는다. &연산자로 포인터의 주소를 얻을 수 있다.

    int test_num = 5;
    int *i_ptr; //포인터 선언
    i_ptr = &test_num;
    printf("포인터의 값:%p\n",i_ptr);
    printf("포인터의 주소 값:%p\n",&i_ptr);
//포인터의 값:0x7ffeefbff5c8
//포인터의 주소 값:0x7ffeefbff5c0

 

포인터 덧셈 뺄셈

포인터에 정수에 선언된 형식의 바이트수만큼 곱해진 값이 더해지거나 빼진다. 

    int i_arr[10] = {0,1,2,3,4,5,6,7,8,9};
    int *i_ptr; //포인터 선언
    i_ptr = i_arr;
    printf("포인터의(주소):%p\n",i_ptr);
    printf("포인터의(값):%d\n",*i_ptr);
    
    i_ptr = i_ptr+2;
    printf("포인터의 덧셈(주소):%p\n",i_ptr);
    printf("포인터의 덧셈(값):%d\n",*i_ptr);
    
    i_ptr = i_ptr-2;
    printf("포인터의 뺄셈(주소):%p\n",i_ptr);
    printf("포인터의 뺄셈(값):%d\n",*i_ptr);
//포인터의(주소):0x7ffeefbff5a0
//포인터의(값):0
//포인터의 덧셈(주소):0x7ffeefbff5a8
//포인터의 덧셈(값):2
//포인터의 뺄셈(주소):0x7ffeefbff5a0
//포인터의 뺄셈(값):0

 

포인터 증감

    int i_arr[10] = {0,1,2,3,4,5,6,7,8,9};
    int *i_ptr; //포인터 선언
    i_ptr = i_arr;
    printf("포인터의(주소):%p\n",i_ptr);
    printf("포인터의(값):%d\n",*i_ptr);
    
    i_ptr++;
    printf("포인터의 증감(주소):%p\n",i_ptr);
    printf("포인터의 증감(값):%d\n",*i_ptr);
    
    i_ptr--;
    printf("포인터의 감소(주소):%p\n",i_ptr);
    printf("포인터의 감소(값):%d\n",*i_ptr);
//포인터의(주소):0x7ffeefbff5a0
//포인터의(값):0
//포인터의 덧셈(주소):0x7ffeefbff5a4
//포인터의 덧셈(값):1
//포인터의 뺄셈(주소):0x7ffeefbff5a0
//포인터의 뺄셈(값):0

 

포인터끼리의 뺄셈

뺄셈보다는 차이를 구한다고 생각해야 합니다. 

    int i_arr[10] = {0,1,2,3,4,5,6,7,8,9};
    int *i_ptr; //포인터 선언
    int *i_ptr_2;
    i_ptr = i_arr; //0번쨰 원소를 가리킨다.
    i_ptr_2 = i_arr+4; //4번째 원소를 가리킨다.

    printf("포인터의 차이:%d\n",i_ptr_2 - i_ptr);
    //포인터의 차이:4
    

4바이트 차이가 있다는 것이 아니라 4개의 데이터형 차이(여기선 int)만큼 떨어져 있다는 것을 뜻합니다.

댓글()