다중포인터, 2차원 배열의 포인터와 함수 인자 전달 방식

NOAH·2021년 2월 22일
0
post-thumbnail

포인터 변수를 가리키는 포인터 변수

int main(void)
{
double num = 3.14; 
double *ptr = # // num의 주솟값을 가리키는 ptr 포인터변수
double **dptr = &ptr; // *dptr == ptr -> *(*dptr) == *ptr


}

포인터 변수의 주소값을 저장하는 것이 이중 포인터 변수이다.
*dptr 은 ptr을 가리키고, **dptr은 num을 의미한다.

이번엔 이러한 구조의 구조를 포인터형식을 코드화 해보자.

#include <stdio.h>

int main()
{
    double num = 3.14; 
    double *ptr = &num; 
    double **dptr = &ptr; 
    double *ptr2 = 0;
    
    printf("%9p %9p \n", ptr, *dptr); 
    printf("%9g %9g \n", num, **dptr); 
    
    ptr2 = *dptr; 
    // ptr2 = ptr
    
    *ptr2 = 10.99; 
    //ptr2포인터를 이용해 num의 값을 10.99로 변경
    
    printf("%9g %9g \n", num, **dptr);
    
    return 0;
}

0x7ffeefbff3e0 0x7ffeefbff3e0 
     3.14      3.14 
    10.99     10.99 

포인터의 필요성?

  • scanf함수와 같이 함수 내에서 함수 외부에 선언된 변수에 접근 가능
  • 메모리의 동적 할당을 이해 하는데 필수
  • 향후 공부하는 자료구조에 폭 넓은 이해 가능

2차원 배열의 포인터형?

1차원 배열의 경우 배열의 이름을 가리키는 대상을 기준으로 메모리 접근방법과 포인터 연산시 주소값의 증감치가 결정 되었다.2차원 배열에서는 포인터은 가로의 길이가 아주 밀접한 관련이 있다.

1차원 배열에서 (배열 + 1) 을 하면 포인터의 타입만큼 증가가 되었는데,
2차원 배열에서는 (포인터 타입 * 가로의 길이) 만큼 증가가 된다.

2차원 배열 포인터 선언과 할당

2차원 배열 함수 인자로 전달

void ShowArayElem(int (*arr2)[3], int len){...};
void AddArayElem(int (*arr2)[3], int len, int add){...};

int (*arr2)[3] 대신하여 int arr[][3] 로 2차원 배열을 함수로 전달할 수도 있다.

void ShowArayElem(int arr2[][3], int len){...};
void AddArayElem(int arr2[][3], int len, int add){...};

0개의 댓글