ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๐Ÿ’• ํฌ์ธํ„ฐ์˜ ํฌ์ธํ„ฐ

 

ํฌ์ธํ„ฐ์˜ ํฌ์ธํ„ฐ๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ๋˜ ๋‹ค๋ฅธ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ๋œปํ•˜๋Š” ๊ฒƒ์œผ๋กœ์„œ ํ”ํžˆ '์ด์ค‘ ํฌ์ธํ„ฐ' ๋˜๋Š” '๋”๋ธ” ํฌ์ธํ„ฐ'๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ์„ ์–ธ์— ์‚ฌ์šฉ๋˜๋Š” * ์—ฐ์‚ฐ์ž๋ฅผ ๋‘ ๊ฐœ ์ด์–ด์„œ ์„ ์–ธํ•œ๋‹ค. 

int **ptr = NULL; // ์ด๋Ÿฐ ์‹์œผ๋กœ *๋ฅผ ์—ฐ๋‹ฌ์•„ ๋‘๊ฐœ ์‚ฌ์šฉ !

 

๊ธฐ๋ณธ ์˜ˆ์ œ

#include <stdio.h>

int main()
{
	double num = 3.14; 
	double* ptr = &num; // num์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜ ptr ์„ ์–ธ 
	double** dptr = &ptr; // ptr์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜ dptr ์„ ์–ธ
	double* ptr2;

	printf("%9p %9p \n", ptr, *dptr); // *dptr์€ ptr์„ ์˜๋ฏธํ•˜๋‹ˆ ๋™์ผํ•œ ์ถœ๋ ฅ๊ฐ’ 
	printf("%9g %9g \n", num, **dptr); // **dptr์€ num์„ ์˜๋ฏธํ•˜๋‹ˆ ๋™์ผํ•œ ์ถœ๋ ฅ ๊ฐ’ 
	ptr2 = *dptr; //ptr2 = ptr๊ณผ ๊ฐ™์€ ๋ฌธ์žฅ 
	*ptr2 = 10.99; // ๋ณ€์ˆ˜ num์˜ ๊ฐ’์„ 10.99๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ์žˆ๋‹ค
	printf("%9g %9g \n", num, **dptr); // ๋ณ€๊ฒฝ๋œ num์˜ ๊ฐ’์„ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ dptr๊ณผ num์„ ์ด์šฉํ•ด์„œ ํ™•์ธ
	return 0;
}

RESULT:

 

 

๐Ÿ’• ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ๋Œ€์ƒ์˜ Call-by-reference

 

๋‘ ์‹ฑ๊ธ€ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ์„œ๋กœ ๋ฐ”๊ฟ”์„œ ์ €์žฅํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด๋ณด์ž. ์ฆ‰, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ์ฐธ์กฐ๊ด€๊ณ„๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

#include <stdio.h>

void SwapIntPtr(int* p1, int* p2)
{
	int* temp = p1;
	p1 = p2;
	p2 = temp;
} // int * p1 ๊ณผ int *p2์˜ ๊ฐ’์„ ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ๋Š” ํ•จ์ˆ˜

int main()
{
	int num1 = 10, num2 = 20;
	int* ptr1, * ptr2;
	ptr1 = &num1, ptr2 = &num2;
	printf("*ptr1,*ptr2: %d %d \n", *ptr1, *ptr2);

	SwapIntPtr(ptr1, ptr2);
	printf("*ptr1,*ptr2: %d %d \n", *ptr1, *ptr2);
	return 0;
}

 

RESULT:

 

๊ฒฐ๊ณผ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๋ชจ์Šต์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด p1์€ ptr1๊ณผ ๋ณ„๊ฐœ์ด๊ณ  p2๋Š” ptr2์™€ ๋ณ„๊ฐœ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฆ‰, p1๊ณผ p2์— ์ €์žฅ๋œ ๊ฐ’์€ ๋ฐ”๋€Œ์ง€๋งŒ ์ด๋Š” ptr1๊ณผ ptr2์™€๋Š” ๋ณ„๊ฐœ์˜ ๋ณ€์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ptr1์€ ์—ฌ์ „ํžˆ num1์˜ ์ฃผ์†Œ ๊ฐ’์„, ptr2๋Š” ์—ฌ์ „ํžˆ num2์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. 

 

ptr1๊ณผ ptr2๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•จ์ˆ˜ ๋‚ด์—์„œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ptr1๊ณผ ptr2์— ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” int ํ˜• ๋”๋ธ” ํฌ์ธํ„ฐ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•œ๋‹ค. 

 

#include <stdio.h>

void SwapIntPtr(int** dp1, int** dp2)
{
	int* temp = *dp1;
	*dp1 = *dp2;
	*dp2 = temp;
}

int main()
{
	int num1 = 10, num2 = 20;
	int* ptr1, * ptr2;
	ptr1 = &num1, ptr2 = &num2;
	printf("*ptr1,*ptr2: %d %d \n", *ptr1, *ptr2);

	SwapIntPtr(&ptr1, &ptr2);
	printf("*ptr1, *ptr2: %d %d \n", *ptr1, *ptr2);
	return 0;
}

RESULT: 

 

 

 


[์ด์ค‘ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ํ™œ์šฉ]

 

๐Ÿ™Œ ์˜ˆ์ œ 1) ๐Ÿ’ง

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์™€ ๊ธธ์ด๊ฐ€ 5์ธ intํ˜• ๋ฐฐ์—ด์€ ์„ ์–ธํ•œ๋‹ค.

int *maxPtr;
int *minPtr;
int arr[5];

๊ทธ๋ฆฌ๊ณ  MaxAndMin์ด๋ž€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์ด๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์œ„์˜ ๋ฐฐ์—ด๊ณผ ๋‘ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜์ž. ์–ด๋– ํ•œ ์ •๋ณด๋ฅผ ์–ด๋–ป๊ฒŒ ์ „๋‹ฌํ• ์ง€๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด ๊ฒฐ์ •ํ•  ๋ชซ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ maxPtr์—๋Š” ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์š”์†Œ์˜ ์ฃผ์†Œ ๊ฐ’์ด, minPtr์—๋Š” ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ์ €์žฅ๋œ ๋ฐฐ์—ด์š”์†Œ์˜ ์ฃผ์†Œ ๊ฐ’์ด ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

 

๐Ÿคฆ‍โ™€๏ธ ์ƒ๊ฐ ๊ณผ์ •

1. ๋จผ์ € MaxAndMin ํ•จ์ˆ˜์˜ ์—ญํ• ์„ ์ •ํ•ด์ค€๋‹ค. ๋ฐฐ์—ด์˜ ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ max ๊ฐ’๊ณผ min ๊ฐ’์„ ์ฐพ์•„์ฃผ๋Š” ํ•จ์ˆ˜๋กœ ์„ค์ •ํ•˜์˜€๋‹ค. ๋น„๊ต๋ฅผ ํ•ด์•ผํ•˜๋‹ˆ for๋ฌธ์„ ์ด์šฉํ•˜์—ฌ if๋ฌธ์„ ํ†ตํ•ด ๋งจ ์ฒ˜์Œ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์„ arr[0]์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋น„๊ตํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ์ ์€ ๊ฐ’์„ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ง์ ‘ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์•ผํ•˜๋‹ˆ int ํ˜• ๋”๋ธ”ํฌ์ธํ„ฐ๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•˜๋Š” ์ ์ด๋‹ค. 

 

2. main ํ•จ์ˆ˜์—์„  scanf ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐ์—ด์˜ ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›๋„๋ก ํ•˜๊ฒ ๋‹ค. 

 

๋‹ต์•ˆ: 

#include <stdio.h>

void MaxAndMin(int* arr, int size, int** mxPtr, int** mnPtr)
{
	int* max, * min;
	int i;

	max = min = &arr[0];
	for (i = 0; i < size; i++)
	{
		if (*max < arr[i])
			max = &arr[i];
		if (*min > arr[i])
			min = &arr[i];
	}
	
	*mxPtr = max;
	*mnPtr = min;
}

int main()
{
	int* maxPtr;
	int* minPtr;
	int arr[5];
	int i;

	for (i = 0; i < 5; i++)
	{
		printf("์ •์ˆ˜ ์ž…๋ ฅ %d : ", i + 1);
		scanf("%d", &arr[i]);
	}

	MaxAndMin(arr, sizeof(arr) / sizeof(int), &maxPtr, &minPtr);
	printf("์ตœ๋Œ€: %d, ์ตœ์†Œ: %d \n", *maxPtr, *minPtr);
	return 0;
}

 

RESULT:

 

์ •์ˆ˜ ์ž„์˜ ์ž‘์„ฑ

 

โœ” ๋ณด์ถฉํ•  ๋ถ€๋ถ„

1. ๋ฏธ๋ฆฌ ๊ฐ ํ•จ์ˆ˜์˜ ์—ญํ• ๊ณผ ๋ชฉํ‘œ๋ฅผ ๋ช…์‹œํ•ด๋‘๊ณ  ์ฝ”๋“œ ์งœ๊ธฐ 

 

 

 

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2025/05   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ