컴퓨터/C
어느 정도 포인터의 개념이 익숙해졌다면, 다중 포인터에 대하여 알아보겠습니다.
다중 포인터란 포인터를 담는 포인터의 개념입니다. 포인터를 정확하게 이해하고 있으면 다중 포인터의 개념을 이해하는 데는 문제가 없을 것입니다.
다중 포인터는 포인터 변수를 선언하는 *의 개수로 몇 중 포인터인지 선언을 합니다.
예를 들어 2중 포인터의 선언은 다음과 같습니다.
int val; // 일반 변수
int* p; // 1중 포인터 변수
int** pp; // 2중 포인터 변수
3가지 변수에 대하여 특징을 다시 한번 정리해 보자면 다음과 같습니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
int val = 10;; // 일반 변수
int* p; // 1중 포인터 변수
int** pp; // 2중 포인터 변수
p = &val;
pp = &p;
printf("*p로 val 접근: %d\n", *p);
printf("**pp로 val 접근: %d\n", **pp);
printf("pp에 저장된 메모리 주소 : %X\n", pp);
printf("p의 메모리 주소 : %X\n", &p);
printf("p에 저장된 메모리 주소 : %X\n", p);
printf("val의 메모리 주소 : %X\n", &val);
}
포인터와 다중포인터의 개념을 이해했다면 왜 쓰는지 알아야 됩니다.
포인터의 경우 여러 지역변수를 다른 함수에서 제어할 수 있는 장점이 있다고 했습니다.
그렇다면 다중 포인터는 어떤 장점이 있을까요?
어떤 지역 내에 선언된 포인터 변수를 다른 함수에서 제어할 수 있게 됩니다.
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
void swap(int** pp)
{
int a;
int* p;
p = &a;
printf("함수 안의 a의 주소 : %p\n", &a);
//2중 포인터로 main함수안의 p 포인터 안에 저장된 메모리 값 수정
*pp = &a;
}
int main()
{
int val = 10;; // 일반 변수
int* p; // 1중 포인터 변수
p = &val;
printf("val의 메모리 주소: %p\n", &val);
printf("함수 실행 전 p안에 저장된 메모리 주소 : %p\n", p);
swap(&p);
printf("함수 실행 후 p안에 저장된 메모리 주소 : %p\n", p);
}
이해가 되셨나요? 2중 포인터를 함수의 매개변수로 사용한다면 다른 함수에 있는 포인터 변수에 저장된 메모리 주소를 제어를 할 수 있는 장점이 생깁니다. 이런 기능들을 이용해 함수와 함수 사이에서 조금 더 데이터를 원활하게 관리할 수 있습니다.
C 언어 - static 키워드 (정적 키워드) (0) | 2021.06.26 |
---|---|
C 언어 - Stack Frame (스택 프레임) (0) | 2021.06.26 |
C 언어 - 구조체 포인터 (0) | 2021.06.23 |
C 언어 - typedef 키워드 (0) | 2021.06.22 |
C 언어 - struct(구조체) (0) | 2021.06.22 |
91년생 공학엔지니어의 개발일지
TODAY :
YESTER DAY :
TOTAL :
Commnet