[자료구조 & 알고리즘] C언어 더블 포인터 뜯어보기

2025. 5. 8. 23:56·[자료구조 & 알고리즘]
728x90
  • 이중 포인터란 포인터 변수의 주소를 값으로 가지는 포인터 변수
  • 함수에 이중포인터를 사용하는 이유
void lls_create_stack(linkedliststack** stack)
{
	(*stack) = (linkedliststack*)malloc(sizeof(linkedliststack));
	(*stack)->list = NULL;
	(*stack)->top = NULL;
}
  • stack은 linkedliststack 구조체를 가리키는 주소를 담은 포인터 변수의 주소를 담은 인자이다.
  • 최초 선언 후 아직 위 함수를 거치지 않은 linkedliststack 구조체 자료형의 포인터 변수는 아무 주소도 가리키지 않는 초기값의 형태를 띄고 있다.
  • 포인터 변수에게 새로운 스택 주소를 알려주기 위해선 주소를 할당해주어야한다.
  • 여기서 우리는 malloc() 함수가 메모리 주소를 반환한다는 사실을 짚고 넘어가야한다.
  • 만약 싱글 포인터를 사용해서 malloc()을 사용했을 경우를 생각해보자
    • stack이라는 매개변수에 초기값을 가지고 있는 구조체의 포인터 변수가 복사되어 전달된다.
    • 이 복사된 값은 지금부터 별개로 존재한다.
    linkedliststack* stack = NULL; 
    void lls_create_stack(linkedliststack* stack) 1번
    {
    	stack = (linkedliststack*)malloc(sizeof(linkedliststack)); 2번
    	stack->list = NULL; 
    	stack->top = NULL; 
    } 3번
    
    함수 안의 stack main의 stack
    함수 매개변수가 가리키는 값 NULL NULL 1번
    *stack의 의미 malloc이 반환한 새로운 메모리 주소 NULL 2번
    함수 작동 후 코드 블록이 끝나서 메모리에서 사라짐 NULL 3번
  • 그렇다면 이중 포인터를 사용하면 어떻게 될까
    • stack이라는 매개변수에 초기값을 주소값으로 가지고 있는 포인터 변수의 주소를 가진 포인터 변수가 복사되어 전달된다.
    • 이 복사된 값 또한 별개로 존재한다.
    linkedliststack* stack = NULL;
    
    void lls_create_stack(linkedliststack** stack) 1번
    {
    	(*stack) = (linkedliststack*)malloc(sizeof(linkedliststack)); 2번
    	(*stack)->list = NULL;
    	(*stack)->top = NULL;
    } 3번
    
    함수 안의 stack main의 stack의 값 변화
    함수 매개변수가 가리키는 값 main에서 선언한 stack 포인터 변수의 주소 NULL 1번
    *stack의 의미 malloc이 반환한 새로운 메모리 주소를 main에서 선언한 포인터 변수에 새로히 할당한다. 새로 할당된 malloc() 메모리주소 2번
    함수 작동 후 코드 블록이 끝나서 메모리에서 사라짐 새로 할당된 malloc() 메모리 주소 3번
  • 헷갈릴 수 있는 것
    • main()에서 선언한 포인터 변수의 주소와 함수 내에서 매개변수로 쓰이는 변수의 주소는 다르다
    • 단, 가리키고 있는 주소의 값은 복사하여서 사용하기에 같다
728x90

'[자료구조 & 알고리즘]' 카테고리의 다른 글

리스트 ADT / SLL / DLL / CDLL  (0) 2025.05.05
[자료구조 & 알고리즘] C언어의 포인터(pointer), 구조체(structure), 힙(heap), 스택(stack)  (1) 2025.05.05
'[자료구조 & 알고리즘]' 카테고리의 다른 글
  • 리스트 ADT / SLL / DLL / CDLL
  • [자료구조 & 알고리즘] C언어의 포인터(pointer), 구조체(structure), 힙(heap), 스택(stack)
뽕규의 스케치북
뽕규의 스케치북
공부 열심히 해볼게요
  • 뽕규의 스케치북
    뽕규의 스케치북
    뽕규의 스케치북
  • 전체
    오늘
    어제
  • 링크

    • 파이썬 공식 문서
    • GitHub
    • 분류 전체보기 (37)
      • [파이썬] (17)
      • [데이터 분석] (3)
      • [Git&GitHub] (5)
      • [자료구조 & 알고리즘] (3)
      • [안드로이드 앱] (0)
      • [네트워크] (0)
      • [머신러닝 & 딥러닝] (0)
      • [SQL] (1)
      • [컴퓨터 구조 & 운영체제] (0)
      • [개발자 수학] (0)
      • [노션] (6)
      • [기타] (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    파이썬
    발전
    기초
    GIT
    push
    수식
    함수
    sourcetree
    python
    개념
    소스트리
    github
    *
    깃허브
    pull
    깃
    TODO
    공부
    DB
    노션
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
뽕규의 스케치북
[자료구조 & 알고리즘] C언어 더블 포인터 뜯어보기
상단으로

티스토리툴바