ν‹°μŠ€ν† λ¦¬ λ·°

728x90
λ°˜μ‘ν˜•
λ ‰ν† ν”Όμ•„ μ •ν˜œκ²½ κ°•μ‚¬λ‹˜μ˜ Secure & Generic C κ°•μ˜λ₯Ό λ“£κ³ , μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 
ν•΄λ‹Ή λ‚΄μš©μ˜ μ €μž‘κΆŒμ€ μ •ν˜œκ²½ κ°•μ‚¬λ‹˜μ—κ²Œ μžˆμŠ΅λ‹ˆλ‹€.

μ—°μ‚°μž μš°μ„ μˆœμœ„

 μ—°μ‚°μž μš°μ„ μˆœμœ„λ₯Ό μ•Œμ§€ λͺ»ν•˜κ³ , 적절히 ν™œμš©ν•˜μ§€ λͺ»ν•œλ‹€λ©΄ μ›μΉ˜ μ•ŠλŠ” κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 μžˆλ‹€. 포인터λ₯Ό μ‚¬μš©ν•˜λ”λΌλ„ `()`에 따라 λ‹€λ₯Έ κ²°κ³Όλ₯Ό λ§Œλ“€κ²Œ λœλ‹€.

 

#include <stdio.h>

int main()
{
	int *p;
	int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
	p = num;

	*p++;
	(*p)++;
	*++p;
	++*p;

	return 0;
}

 κ°„λ‹¨ν•œ μ½”λ“œμ΄μ§€λ§Œ μ—°μ‚°μžμ˜ μš°μ„ μˆœμœ„λ₯Ό λͺ¨λ₯Έλ‹€λ©΄, μœ„μ˜ μ½”λ“œκ°€ μ–΄λ–€ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜κ²Œ λ˜λŠ”μ§€ μ•Œ 수 없을 것이닀.

 

  • `*p++`
    • 포인터가 κ°€λ₯΄ν‚€λŠ” μœ„μΉ˜λ₯Ό 1 μ¦κ°€μ‹œν‚¨λ‹€.
    • μ΄λŠ” `*` 보닀 `++`이 μš°μ„ μˆœμœ„λ₯Ό 가지기 λ•Œλ¬Έμ΄λ‹€. 즉 pλ₯Ό 1 μ¦κ°€μ‹œν‚€κ³ , μ°Έμ‘°λ₯Ό ν•˜κ²Œ λ˜μ–΄ λ‹€μŒ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” 것이닀.
  • `(*p)++`
    • μœ„μ™€ 달리 `()`λ₯Ό 톡해 포인터 μ—°μ‚°μ˜ μš°μ„ μˆœμœ„λ₯Ό 주게 되면 μ°Έμ‘°ν•˜λŠ” 값을 μ¦κ°€μ‹œν‚€κ²Œ λœλ‹€.
  • `*++p`
    • pκ°€ 증가 후에 μ°Έμ‘°ν•˜κ²Œ λ˜λ―€λ‘œ λ‹€μŒ μ£Όμ†Œλ₯Ό μ°Έμ‘°ν•˜κ²Œ λœλ‹€.
  • `++*p`
    • μ°Έμ‘°ν•œ 값을 μ¦κ°€μ‹œν‚€κ²Œ λœλ‹€.

 μ΄ 외에도 μ²˜λ¦¬ν•˜κ³ μž ν•˜λŠ” μ½”λ“œμ— μ—°μ‚°μžμ˜ μš°μ„  μˆœμœ„λ₯Ό 보μž₯ν•˜μ—¬μ•Ό ν•˜λŠ” 경우λ₯Ό μƒκ°ν•˜μ—¬ μ½”λ“œλ₯Ό μž‘μ„±ν•˜μ—¬μ•Ό ν•œλ‹€.

 

sizeof

#include <stdio.h>

int main()
{
	int a = 5;
	a = sizeof(a++);
	printf("a : %d\n", a);

	return 0;
}

 sizeof의 경우 μžλ£Œν˜•μ˜ 크기λ₯Ό ꡬ할 λ•Œ 많이 μ‚¬μš©ν•œλ‹€. λ˜ν•œ `sizeof(ν‘œν˜„μ‹)`으둜 μ‚¬μš©ν•  수 μžˆλ‹€. ν•˜μ§€λ§Œ sizeofμ—μ„œ `agument`둜 연산을 μˆ˜ν–‰ν•˜κ±°λ‚˜, ν•¨μˆ˜λ₯Ό 전달할 경우 이λ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ μœ„μ˜ μ½”λ“œμ˜ `a`의 값은 κ·ΈλŒ€λ‘œ 5κ°€ λœλ‹€.

 

ν‘œν˜„μ‹μ˜ μˆœμ„œ

int last;

int check_num(int num)
{
    last = num;
    return num;
}

int main()
{
    int x = check_num(1) + check_num(2);
    return 0;
}

 μœ„μ˜ μ½”λ“œμ—μ„œ μ½”λ“œλ₯Ό μ‹€ν–‰ν•œ 후에, `last`κ°€ μ–΄λ–€ 값이 될지 μ•Œ 수 μžˆλŠ”κ°€? 각 ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μˆœμ„œλŠ” 보μž₯λ˜μ§€ μ•ŠμœΌλ―€λ‘œ μ–΄λ–€ 값이 될지 μ•Œ 수 μ—†λ‹€. λ§Œμ•½ ν•¨μˆ˜ 호좜 μˆœμ„œκ°€ 보μž₯λ˜μ–΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” λͺ…μ‹œμ μœΌλ‘œ 라인을 λ‚˜λˆ  ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λ„λ‘ ν•˜μ—¬μ•Ό ν•œλ‹€.

 

728x90
λ°˜μ‘ν˜•
λŒ“κΈ€
κΈ€ 보관함
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€