728x90

인수 전달 방법

1. 값에 μ˜ν•œ 전달

  • 인자 μ „λ‹¬μ˜ 기본방식은 κ°’μ˜ '볡사'이닀.
  • 값을 λ³΅μ‚¬ν•΄μ„œ 인수둜 μ „λ‹¬ν•˜λ©΄ ν˜ΈμΆœν•˜λŠ” ν•¨μˆ˜μ˜ 값은 λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.
  • 값에 μ˜ν•œ 전달(Call-by-value): ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ λ‹¨μˆœνžˆ 값을 λ³΅μ‚¬ν•΄μ„œ μ „λ‹¬ν•˜λŠ” ν•¨μˆ˜ν˜ΈμΆœ
#include <stdio.h>

void add(int a);	// ν•¨μˆ˜ μ„ μ–Έ

int main(void)
{
    int num = 10;
    
    add(num);		// ν•¨μˆ˜ 호좜
    printf("num : %d\n",num);
    
    return 0'
}

void add(int a)		// ν•¨μˆ˜ μ •μ˜
{
	a = a + 5;
}
μ‹€ν–‰κ²°κ³Ό
num : 10

 

 

 

 

  • ν•¨μˆ˜κ°€ λ°˜ν™˜λœ 이후에도 ν˜ΈμΆœν•œ ν•¨μˆ˜μ— μžˆλŠ” λ³€μˆ˜μ˜ 값은 λ³€ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ™œλƒν•˜λ©΄ λ§€κ°œλ³€μˆ˜ a의 λ©”λͺ¨λ¦¬ μ£Όμ†Œμ— μ €μž₯된 값을 main ν•¨μˆ˜λ‘œ λ„˜κ²¨μ£Όμ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

 

 

 

 

 


2. 참쑰에 μ˜ν•œ 전달

  • 참쑰에 μ˜ν•œ 전달은 인수둜 λ³€μˆ˜μ˜ 값을 μ „λ‹¬ν•˜λŠ” 것이 μ•„λ‹Œ, μ£Όμ†Œκ°’μ„ μ „λ‹¬ν•œλ‹€.
  • 참쑰에 μ˜ν•œ 전달(Call-by-reference)μ£Όμ†Œκ°’μ„ μ „λ‹¬ν•˜λŠ” ν•¨μˆ˜ν˜ΈμΆœ
  • 이 방법은 인수둜 μ „λ‹¬λœ λ³€μˆ˜μ˜ 값을 ν•¨μˆ˜ λ‚΄μ—μ„œ λ³€κ²½ν•  수 μžˆλ‹€.
#include <stdio.h>

void add(int *a);	// ν•¨μˆ˜ μ„ μ–Έ

int main(void)
{
	int num = 10;
    
    add(&num);		// ν•¨μˆ˜ 호좜
    printf("num : %d\n", num);
    
    return 0;
}

void add(int *a)	// ν•¨μˆ˜ μ •μ˜
{
	*a = *a + 5;
}
μ‹€ν–‰κ²°κ³Ό
num : 15

 

 

 

 

 

 

  • λ³€μˆ˜μ˜ μ£Όμ†Œκ°’μ„ 인자둜 λ°›μ•„ ν•΄λ‹Ή λ³€μˆ˜μ— 직접 μ ‘κ·Όν•œλ‹€.
  • add ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜μΈ aλŠ” num을 가리킀고, *aλŠ” num을 μ˜λ―Έν•œλ‹€.
  • λ”°λΌμ„œ main ν•¨μˆ˜μ— μžˆλŠ” num을 μ‚¬μš©ν•  수 있으며 κ·Έ 값을 λ°”κΎΈλŠ” 것도 κ°€λŠ₯ν•˜λ‹€.

 

 

 

 

 

 


배열을 ν•¨μˆ˜μΈμžλ‘œ μ „λ‹¬ν•˜κΈ°

  • 배열을 ν†΅μ§Έλ‘œ μ „λ‹¬ν•˜λŠ” 방법은 μ—†λ‹€.
  • Cμ–Έμ–΄λŠ” λ§€κ°œλ³€μˆ˜λ‘œ 배열이 μ„ μ–Έλ˜λŠ” 것을 ν—ˆμš©ν•˜μ§€ μ•Šμ•„μ„œ ν•¨μˆ˜μ˜ 인자둜 배열을 μ „λ‹¬ν•˜μ§€ λͺ»ν•œλ‹€.
  • 배열을 ν†΅μ§Έλ‘œ μ „λ‹¬ν•˜μ§€ μ•ŠλŠ” λŒ€μ‹  λ°°μ—΄μ˜ μ£Όμ†Œκ°’μ„ 전달할 수 μžˆλ‹€.
  • λ°°μ—΄μ˜ 이름은 ν¬μΈν„°μ΄λ―€λ‘œ λ°°μ—΄μ˜ 이름이 λ°°μ—΄μ˜ 첫 번째 μ›μ†Œλ₯Ό κ°€λ¦¬ν‚€λŠ” ν¬μΈν„°λ‘œ μ‚¬μš©ν•  수 μžˆλ‹€.

β–Ά 배열을 λ§€κ°œλ³€μˆ˜λ‘œ μ‚¬μš©ν•˜λ €λ©΄ () κ΄„ν˜Έ μ•ˆμ—μ„œ λ§€κ°œλ³€μˆ˜ 이름 뒀에 [] λŒ€κ΄„ν˜Έλ₯Ό λΆ™μ΄κ±°λ‚˜ λ§€κ°œλ³€μˆ˜λ₯Ό *ν¬μΈν„°λ‘œ 지정해쀀닀.

λ°˜ν™˜ν˜• ν•¨μˆ˜μ΄λ¦„(μžλ£Œν˜• λ§€κ°œλ³€μˆ˜[])
{

}

λ°˜ν™˜ν˜• ν•¨μˆ˜μ΄λ¦„(μžλ£Œν˜• *λ§€κ°œλ³€μˆ˜)
{

}
#include <stdio.h>

void arrprintf(int *arg);

int main(void)
{
	int arr[3] = {10, 20, 30};
    
    arrprintf(arr);		// λ°°μ—΄μ˜ 이름이 μ§€λ‹ˆκ³  μžˆλŠ” μ£Όμ†Œκ°’ 전달
    
    return 0;
}

void arrprintf(int *arg)
{
	int i;
    
    for(i = 0; i < 3; i++)
    	printf("%d ", arg[i]);		// argλΌλŠ” 이름을 λ°°μ—΄μ˜ μ΄λ¦„μ²˜λŸΌ μ‚¬μš©
        
    printf("\n");
}
μ‹€ν–‰κ²°κ³Ό
10 20 30

 

  • int *arg와 int arg[]λŠ” λ™μΌν•œ 선언이닀.
  • int arg[]κ°€ 배열이 인자둜 μ „λ‹¬λœλ‹€λŠ” λŠλ‚Œμ„ 더 κ°•ν•˜κ²Œ μ€€λ‹€
  • λ”°λΌμ„œ λ°°μ—΄μ˜ μ£Όμ†Œκ°’μ΄ 인자둜 전달될 λ•ŒλŠ” int arg[] ν˜•νƒœμ˜ 선언을 주둜 μ‚¬μš©ν•œλ‹€. 

 


ν•¨μˆ˜μ˜ 포인터

  • ν•¨μˆ˜ 이름은 ν•¨μˆ˜κ°€ μ •μ˜λ˜μ–΄ μžˆλŠ” λ©”λͺ¨λ¦¬μ˜ μ‹œμž‘ μœ„μΉ˜μ΄λ‹€.
  • ν•¨μˆ˜ 이름도 ν¬μΈν„°μ΄λ―€λ‘œ printfμ—μ„œ 좜λ ₯ν•΄ 보면 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ λ‚˜μ˜¨λ‹€.
#include <stdio.h>

void hello(void);

int main(void)
{
	printf("%p\n",hello);
    
    return 0;
}

void hello(void)
{
	printf("Hello, world!\n");
}

μ‹€ν–‰κ²°κ³Ό
008613BB

<ν•¨μˆ˜ 포인터 λ³€μˆ˜ μ„ μ–Έ>
λ°˜ν™˜κ°’μžλ£Œν˜• (*ν•¨μˆ˜ν¬μΈν„°μ΄λ¦„) (λ§€κ°œλ³€μˆ˜ μžλ£Œν˜•)
#include <stdio.h>

int add(int num1, int num2);

int main(void)
{
    int (*fptr)(int, int);		// intν˜• λ°˜ν™˜κ°’, intν˜• λ§€κ°œλ³€μˆ˜ 두 κ°œκ°€ μžˆλŠ” ν•¨μˆ˜ 포인터 fptr μ„ μ–Έ
    
    fptr = add;				// add ν•¨μˆ˜μ˜ λ©”λͺ¨λ¦¬ μ£Όμ†Œλ₯Ό ν•¨μˆ˜ 포인터 fptr에 μ €μž₯
    printf("%d\n", fptr(10, 20));	// ν•¨μˆ˜ ν¬μΈν„°λ‘œ add ν•¨μˆ˜ 호좜
    
    return 0;
}

int add(int num1, int num2)		// intν˜• λ°˜ν™˜κ°’, intν˜• λ§€κ°œλ³€μˆ˜ 두 개
{
	return num1 + num2;		
}
μ‹€ν–‰κ²°κ³Ό
30

 

 

  • ν•¨μˆ˜κ°€ λ°˜ν™˜ν˜•μ΄ intν˜•μ΄κ³  λ§€κ°œλ³€μˆ˜λ‘œ intν˜• λ³€μˆ˜κ°€ 두 개 μ„ μ–Έλ˜μ—ˆμœΌλ‹ˆ, 이 ν•¨μˆ˜μ˜ μ£Όμ†Œ κ°’ μ €μž₯을 μœ„ν•œ ν•¨μˆ˜ 포인터 λ³€μˆ˜λŠ” λ‹€μŒκ³Ό 같이 μ„ μ–Έν•œλ‹€.

 

β–Ά ꡳ이 ν•¨μˆ˜ 포인터λ₯Ό 쓰지 μ•Šμ•„λ„ ν•¨μˆ˜λ₯Ό 직접 ν˜ΈμΆœν•˜μ—¬ 같은 κΈ°λŠ₯을 ν•˜λŠ” μ½”λ“œλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

ν•˜μ§€λ§Œ, ν•¨μˆ˜ ν¬μΈν„°λŠ” ν•¨μˆ˜λ₯Ό λ”°λ‘œ λ§Œλ“€κ³ , λ‚˜μ€‘μ— ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” κ³³μ—μ„œ μ—°μ‚° 방법을 ν•¨μˆ˜λ‘œ κ΅¬ν˜„ν•  λ•Œ μ“Έ 수 μžˆλ‹€.

λ˜ν•œ, ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ΄ μ—¬λŸ¬ 개의 파일둜 λΆ„λ¦¬λ˜μ–΄ μžˆμ„ λ•Œ λ‹€λ₯Έ νŒŒμΌμ— μžˆλŠ” 정적 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•˜λŠ” λ°©λ²•μœΌλ‘œ ν•¨μˆ˜ 포인터λ₯Ό μ“Έ μˆ˜λ„ μžˆλ‹€.

 

 

 

 

좜처: https://sejong-kr.libguides.com/c.php?g=942235&p=6822368

'ν”„λ‘œκ·Έλž˜λ° > Cμ–Έμ–΄' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

파일 μž…μΆœλ ₯  (0) 2024.08.29
ꡬ쑰체  (0) 2024.08.21
포인터 & λ°°μ—΄  (0) 2024.08.16
포인터  (0) 2024.08.15
λ°°μ—΄  (0) 2024.08.14

+ Recent posts