C์–ธ์–ด

[C์–ธ์–ด] C์–ธ์–ด์—์„œ์˜ ํฌ์ธํ„ฐ - ์ด์ค‘ ํฌ์ธํ„ฐ๋ถ€ํ„ฐ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊นŒ์ง€ ์‘์šฉ ์˜ˆ์‹œ

hyonie 2024. 4. 14. 20:32

๐Ÿคน‍โ™‚๏ธ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํฌ์ธํ„ฐ

1๏ธโƒฃ ํฌ์ธํ„ฐ์˜ ๊ธฐ๋ณธ ๊ฐœ๋… โœจ

ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋กœ, ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ์ฐธ์กฐํ•˜๊ฑฐ๋‚˜ ์กฐ์ž‘ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ์ผ ํฌ์ธํ„ฐ๋ถ€ํ„ฐ ์ •๋ฆฌํ•œ๋‹ค.

 

*๋‹จ์ผ ํฌ์ธํ„ฐ

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” *๊ธฐํ˜ธ๋กœ ํ‘œํ˜„ํ•˜๊ณ , ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

int a = 5;
int *p;
p = &a;

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p๋Š” ๋ณ€์ˆ˜ a์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

 

 

2๏ธโƒฃ ํฌ์ธํ„ฐ์˜ ํฌ์ธํ„ฐ โœจ

**์ด์ค‘ ํฌ์ธํ„ฐ๋ž€

์ด์ค‘ ํฌ์ธํ„ฐ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋กœ, ์ด๋ฅผ ํ†ตํ•ด ๋‹ค์ค‘ ๊ฐ„์ ‘ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

int **pp;

์ด์ค‘ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ pp๋Š” ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ , ์ด๋ฅผ ํ†ตํ•ด ๋ณ€์ˆ˜ a์— ๊ฐ„์ ‘์ ์œผ๋กœ ์ ‘๊ทผํ• ์ˆ˜ ์žˆ๋‹ค.

 

 

 

3๏ธโƒฃ voidํ˜• ํฌ์ธํ„ฐ โœจ

voidํ˜• ํฌ์ธํ„ฐ์˜ ๊ธฐ๋ณธ ๊ฐœ๋…

voidํ˜• ํฌ์ธํ„ฐ๋Š” ์–ด๋–ค ์ž๋ฃŒํ˜•์˜ ์ฃผ์†Œ๋„ ๊ฐ€๋ฆฌํ‚ฌ์ˆ˜ ์žˆ๋Š” ํฌ์ธํ„ฐ๋กœ, ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋‚˜ ๋ฐ์ดํ„ฐ ํ˜•์‹์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๋‹ค.

void *ptr;

 

voidํ˜• ํฌ์ธํ„ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜์ง€๋งŒ ํ•ด๋‹น ์ฃผ์†Œ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์•Œ์ˆ˜ ์—†๋‹ค.

 

voidํ˜• ํฌ์ธํ„ฐ ์‚ฌ์šฉ ์˜ˆ์‹œ

int num = 10;
void *ptr;
ptr = #

 

voidํ˜• ํฌ์ธํ„ฐ prt์€ ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜ num์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

 

 

์œ„ ์ฝ”๋“œ๋Š” voidํ˜• ํฌ์ธํ„ฐ์ธ a๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜ b์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ voidํ˜• ํฌ์ธํ„ฐ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋œ ๊ฐ’์„ ํ•ด์„ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํƒ€์ž… ์ •๋ณด๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ฃผ์†Œ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์—ฌ๊ธฐ์„œ printf("%d\n", *ptr); ์˜ ๋ถ€๋ถ„์€ ์ž˜๋ชป๋œ ๋ถ€๋ถ„์ด๋‹ค. voidํ˜• ํฌ์ธํ„ฐ์ธ ptr์„ ์—ญ ์ฐธ์กฐํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ ค๊ณ  ํ–ˆ์œผ๋‚˜, ์ด๋Š” ์ž˜๋ชป๋œ ๋ฐฉ๋ฒ•์ด๋‹ค. voidํ˜• ํฌ์ธํ„ฐ๋Š” ์ฃผ์†Œ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ๊ทธ ์ฃผ์†Œ์— ์–ด๋–ค ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ์ฃผ์†Œ์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ”๋ฅด๊ฒŒ ํ•ด์„ํ• ์ˆ˜ ์—†๋‹ค.

 

๋”ฐ๋ผ์„œ ์ด ์ฝ”๋“œ๋Š” ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜, ์‹คํ–‰ ์‹œ์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์„ ์ผ์œผํ‚ฌ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ’ก ์ •๋ฆฌํ•˜์ž๋ฉด:

  • voidํ˜• ํฌ์ธํ„ฐ๋Š” ์–ด๋–ค ํƒ€์ž…์˜ ์ฃผ์†Œ๋ผ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด๋‹น ์ฃผ์†Œ์˜ ๊ฐ’์„ ์ง์ ‘ ์—ญ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ• ์ˆ˜ ์—†๋‹ค.
  • voidํ˜• ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ ์€ ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๊ด€๋˜๊ฒŒ ๋‹ค๋ฃจ๊ฑฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ voidํ˜• ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์ ์ ˆํ•œ ํ˜•๋ณ€ํ™˜์„ ํ†ตํ•ด ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

 

voidํ˜• ํฌ์ธํ„ฐ์ธ ptr์„ intํ˜• ํฌ์ธํ„ฐ๋กœ ํ˜•๋ณ€ํ™˜ํ•œ ํ›„์— ์—ญ์ฐธ์กฐํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ณ  ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ptr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ์— ์ €์žฅ๋œ ๊ฐ’ 10์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ถœ๋ ฅํ• ์ˆ˜ ์žˆ๋‹ค.

  

4๏ธโƒฃ ํ•จ์ˆ˜ ํฌ์ธํ„ฐโœจ

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์˜ ์„ ์–ธ

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋Š” ํŠน์ • ํ•จ์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ณ€์ˆ˜๋กœ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

int (*func)(int a); // ์ž๋ฃŒํ˜•(*ํ•จ์ˆ˜ํฌ์ธํ„ฐ ์ด๋ฆ„)(์ธ์ž ๋ชฉ๋ก)

 

์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜๋ช…์•ž์— *์„ ๋ถ™์—ฌ์ฃผ๋ฉด ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๊ฐ€ ์„ ์–ธ๋œ๋‹ค. ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋„ ํฌ์ธํ„ฐ์ด๋ฏ€๋กœ ์ฃผ์†Œ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

 

ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ์‚ฌ์šฉ ์ด์œ 

์ง์ ‘ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋Œ€์‹  ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ์ปดํŒŒ์ผ ํƒ€์ž„ ๋˜๋Š” ๋Ÿฐํƒ€์ž„์— ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ๋ฐ ์œ„์น˜๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.
  • ์ด๋ฅผ ์ •์  ๋ฐ”์ธ๋”ฉ๊ณผ ๋™์  ๋ฐ”์ธ๋”ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ํŠนํžˆ ๋™์  ๋ฐ”์ธ๋”ฉ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ํ™•์ •์„ฑ๊ณผ ์œ ์šฉ์„ฑ์„ ๋†’์ผ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“ ์˜ˆ์‹œ ์ฝ”๋“œ์™€ ์‚ฌ์šฉ ๋ชฉ์ 

์•„๋ž˜๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ์˜ˆ์‹œ ์ฝ”๋“œ์ด๋‹ค. ์ด ์ฝ”๋“œ๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์ˆ˜๋ฅผ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บด๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ ๋„ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ• ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ค€๋‹ค.

#include <stdio.h>

int Plus(int a, int b)
{
	return a + b;
}

int Minus(int a, int b)
{
	return a - b;
}

void main()
{
	int x, y;
	int (*fptr)(int a, int b);
	
	printf("๋‘ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”.");
	scanf_s("%d%d", &x, &y);
	
	fptr = Plus;
	int res = fptr(x, y);
	printf("๋ง์…ˆ ๊ฒฐ๊ณผ = %d\n", res);
	
	fptr = Minus;
	res = fprt(x,y);
	printf("๋บ„์…ˆ ๊ฒฐ๊ณผ = %d\n", red);

}

 

 

5๏ธโƒฃ NULL ํฌ์ธํ„ฐโœจ

NULL ํฌ์ธํ„ฐ์˜ ๊ฐœ๋…

NULL ํฌ์ธํ„ฐ๋Š” ์•„๋ฌด๊ฒƒ๋„ ๊ฐ€๋ฆฌํ‚ค์ง€ ์•Š๋Š” ํฌ์ธํ„ฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ํฌ์ธํ„ฐ์—๋Š” ์–ด๋– ํ•œ ์ฃผ์†Œ๊ฐ’๋„ ํ• ๋‹น๋˜์–ด ์žˆ์ง€์•Š๋‹ค.

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ ptr์€ ํ˜„์žฌ ์•„๋ฌด ๊ฒƒ๋„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€ ์•Š๋‹ค.

int *ptr = NULL;

 

 

๐Ÿ“ ์˜ˆ์‹œ ์ฝ”๋“œ์™€ ์‚ฌ์šฉ ๋ชฉ์ 

์‹ค๋ฌด์—์„œ๋Š” ํ•จ์ˆ˜์˜ ๋™์ž‘ ์—๋Ÿฌ๋ฅผ ์ฒดํฌํ•˜๋Š” ์šฉ๋„๋กœ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ํŠนํžˆ, ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ• ๋•Œ๋Š” ๋ฌด์กฐ๊ฑด NULL๊ฐ’์„ ์ฒดํฌํ•ด์•ผํ•œ๋‹ค.

#include <stdio.h>
#include <string.h>

int main()
{
    char str[] = "Love";
    char* p;
    
    p = strchr(str, 'v');
    
    if(p != NULL)
    {
        *p = 'b';
        printf("๋ณ€๊ฒฝ ๊ฒฐ๊ณผ: %s\n", str);
    }
    else
	{
	    printf("NULL์„ ๋ฆฌํ„ดํ•˜์˜€์Šต๋‹ˆ๋‹ค.\n");
	}

    return 0;
}

 

์œ„ ์ฝ”๋“œ์—์„œ๋Š” strchrํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌธ์ž์—ด์— 'v'๋ฌธ์ž๋ฅผ ์ฐพ๊ณ , ํ•ด๋‹น ์œ„์น˜๋ฅผ ํฌ์ธํ„ฐ p์— ํ• ๋‹นํ•œ๋‹ค. ๊ทธ ํ›„ p๊ฐ€ NULL์ด ์•„๋‹Œ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ์ž๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ strchrํ•จ์ˆ˜๊ฐ€ NULL์„ ๋ฆฌํ„ดํ•˜๋ฉด "NULL์„ ๋ฆฌํ„ดํ•˜์˜€์Šต๋‹ˆ๋‹ค." ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํฌ์ธํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ์–ธ์ œ๋‚˜ NULL์ฒดํฌ๋ฅผ ์žŠ์ง€ ๋ง์•„์•ผํ•œ๋‹ค.