์ƒˆ์†Œ์‹

Languages/C

ํฌ์ธํ„ฐ ์ฃผ์†Œ์—ฐ์‚ฐ, ๋Œ€์ƒ ํฌ๊ธฐ, void *ํ˜• ํฌ์ธํ„ฐ

  • -
๋ฐ˜์‘ํ˜•

๋ชจ๋“  ์‹ค์Šต ์ฝ”๋“œ๋Š” ๊น€์„ฑ์—ฝ ๋Œ€ํ‘œ๋‹˜์˜ 

"Do it ! C์–ธ์–ด ์ž…๋ฌธ" ์ฑ…์˜ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์‹ค์Šตํ•˜๊ณ  ๋‚ด์šฉ์„ ์š”์•ฝํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

โ€ป ์ƒ์—…์šฉ๋„๊ฐ€ ์•„๋‹ˆ๋ฉฐ, tips๋ฅผ ํ†ตํ•ด ๋ฐฐ์šด ๋‚ด์šฉ์„ ๋ณต์Šตํ•˜๊ณ ์ž ์Šค์Šค๋กœ ๊ณต๋ถ€ํ•˜๋Š” ๋ชฉ์ ์œผ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ˆ

๋ถˆ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€ํ•ฉ๋‹ˆ๋‹ค.

 




 

 

์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฒ”์œ„๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ฐฉ๋ฒ•

 

์ž์‹ ์ด ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฒ”์œ„๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ด๋‹ค.

 

 

์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์‹œ์ž‘ ์ฃผ์†Œ์™€ ๋ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด๊ณ ,  ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์‹œ์ž‘ ์ฃผ์†Œ์™€ ์‚ฌ์šฉํ•  ํฌ๊ธฐ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

์‹œ์ž‘ ์ฃผ์†Œ์™€ ๋ ์ฃผ์†Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„ ๊ธฐ์–ตํ•˜๊ธฐ.

 

 

์‹œ์ž‘ ์ฃผ์†Œ์™€ ๋ ์ฃผ์†Œ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๋ฅผ ๊ธฐ์–ตํ•˜๋ ค๋ฉด ๊ฐ๊ฐ์˜ ์ฃผ์†Œ๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๋ฐ ์ด 8byte๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

 

์‹œ์ž‘ ์ฃผ์†Œ์ธ 100๋ฒˆ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด 4byte๊ฐ€ ํ•„์š”ํ•˜๊ณ ,

 

๋ ์ฃผ์†Œ์ธ 103๋ฒˆ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ๋˜ 4byte๊ฐ€ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

์‹œ์ž‘ ์ฃผ์†Œ์™€ ์‚ฌ์šฉํ•  ํฌ๊ธฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„ ๊ธฐ์–ตํ•˜๊ธฐ

 

'์‹œ์ž‘ ์ฃผ์†Œ'์™€ '์‚ฌ์šฉํ•  ํฌ๊ธฐ'๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋ฒ”์œ„๋ฅผ ๊ธฐ์–ตํ•˜๋Š” ๊ฒƒ๋„ ๋‘ ๊ฐ€์ง€ ์ •๋ณด๋ฅผ ๊ธฐ์–ตํ•ด์•ผ ํ•œ๋‹ค.

 

์‹œ์ž‘ ์ฃผ์†Œ์ธ 100๋ฒˆ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ 4byte๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ด๊ณ , ์‚ฌ์šฉํ•  ํฌ๊ธฐ๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ๋˜ 4byte๊ฐ€ ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ!

 

C์–ธ์–ด ๋ฌธ๋ฒ•์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ•ญ์ƒ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ๋จผ์ € ๊ฒฐ์ •ํ•˜๋„๋ก ๋˜์–ด ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด ์ •์ˆ˜ ๊ฐ’ 5๋ฅผ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด int data; ์™€ ๊ฐ™์ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•˜๋Š”๋ฐ

 

์ด๋•Œ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋Š”

 

intํ˜•์œผ๋กœ ์„ ์–ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 4byte๋กœ ๊ฒฐ์ •๋œ๋‹ค. 

 

 

๊ทธ๋ฆฌ๊ณ  data = 5; ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๋Š” data๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ 4byte๋ผ๋Š” ๊ฒƒ์„

 

์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ์— 4byte ํฌ๊ธฐ๋กœ 5๋ฅผ ๋Œ€์ž…ํ•˜๋„๋ก ๋ช…๋ น์„ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

 

๊ฒฐ๊ตญ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋Š” ๋ช…๋ น๋ฌธ์— ํฌํ•จ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์‹ ์ด ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋งŒ ๊ธฐ์–ตํ•ด๋„ ๋œ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

 

์ด๋Ÿฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํŠน์„ฑ ๋•Œ๋ฌธ์— ํฌ์ธํ„ฐ๋„ ์ž์‹ ์ด ๊ฐ€๋ฆฌํ‚ฌ ๋Œ€์ƒ์— ๋Œ€ํ•ด ์‚ฌ์šฉํ•  ๋ฒ”์œ„๋Š” ์ €์žฅํ•˜์ง€ ์•Š๊ณ 

 

์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋งŒ ๊ธฐ์–ตํ•˜๋ฉด ๋œ๋‹ค

#include<stdio.h>

void main(){

    short data = 0;
    short *p = &data; //p๋ณ€์ˆ˜์— data๋ณ€์ˆ˜์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋ ์ฃผ์†Œ๋‚˜ ํฌ๊ธฐ๋Š” ๋ช…์‹œx
    *p = 5; //ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p๊ฐ€ ๊ฐ€๋ฅดํ‚ฌ ๋Œ€์ƒ์˜ ํฌ๊ธฐ๋Š” short์ด๋ฏ€๋กœ p์— ์ €์žฅ๋œ ์‹œ์ž‘ ์ฃผ์†Œ๋ถ€ํ„ฐ 2byte ํฌ๊ธฐ ๊ณต๊ฐ„์— ๊ฐ’ 5๋ฅผ ์ €์žฅํ•จ.

}

 

 

ํฌ์ธํ„ฐ๊ฐ€ ์ž์‹ ์ด ๊ฐ€๋ฅดํ‚ฌ ๋Œ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋งŒ ๊ธฐ์–ตํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ–๊ฒŒ ๋˜๋Š” ํŠน์„ฑ์ด ์žˆ๋‹ค.

 

 

๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

#include<stdio.h>

void main(){
	
    short data = 0;
    short *p = &data;
    p = p+1; // ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’์„ 1๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ด
    
}

 

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ์ฃผ์†Œ๋„ ์ •์ˆ˜ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

ํ•˜์ง€๋งŒ 

 

์ฃผ์†Œ๋ฅผ 1๋งŒํผ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค๋Š” ์˜๋ฏธ๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ๊ณผ ๋‹ค๋ฅด๋‹ค.

 

ํฌ์ธํ„ฐ์—์„œ +1์˜ ์˜๋ฏธ๋Š” ๋‹จ์ˆœํžˆ ์ฃผ์†Œ ๊ฐ’์— +1์„ ๋”ํ•œ๋‹ค๋Š” ๋œป์ด ์•„๋‹ˆ๊ณ ,

 

๊ทธ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์—

 

"์ž๋ฃŒํ˜•์˜ ํฌ๊ธฐ๋ฅผ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค."

 

 

์ด์ฒ˜๋Ÿผ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์— +1์„ ํ•˜๋ฉด ์ž์‹ ์ด ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๋งŒํผ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, 

์ด๊ฒƒ์„ "ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ์—ฐ์‚ฐ"์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๋ชจ๋‘ 100๋ฒˆ์ง€๋ฅผ ๋Œ€์ž…ํ•˜์˜€์ง€๋งŒ 

++์—ฐ์‚ฐ์„ ํ•˜๊ณ  ์ฃผ์†Œ ๊ฐ’์„ ์‚ดํŽด๋ณด๋ฉด ๋ชจ๋‘ ๋‹ค๋ฅธ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๊ณ  ์žˆ๋‹ค.

 

 

#include<stdio.h>

void main() {
	

	/* 
	๊ฐ’์— ์ „๋ถ€ (์ž๋ฃŒํ˜• *)๋ฅผ ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ์บ์ŠคํŒ…, ์ฆ‰ ํ˜• ๋ณ€ํ™˜์„ ํ•ด์ฃผ๋Š” ์ž‘์—…์ด๋‹ค.
	์ผ๋ฐ˜ ์ƒ์ˆ˜๋Š” ํฌ์ธํ„ฐ์™€ ํ˜•์ด ๋‹ค๋ฅด๋ฏ€๋กœ, ์ž๋ฃŒํ˜•์„ ๋งž์ถฐ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
	"์ž๋ฃŒํ˜•์€ ๋ณ€์ˆ˜ ๋ช…์„ ๋บ€ ๋‚˜๋จธ์ง€" ๋ฅผ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์— char *, short * ๋“ฑ.. ๋ณ€์ˆ˜ ๋ช…์„ ๋บ€ ์ž๋ฃŒํ˜•์„
	๋ช…์‹œํ•˜์—ฌ ํ˜•์„ ๋งž์ถ”์–ด ์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.
	*/

	char* p1 = (char*)100; // p1์— 100๋ฒˆ์ง€๋ฅผ ์ €์žฅํ•จ.
	short* p2 = (short*)100; // p2์— 100๋ฒˆ์ง€ ์ €์žฅ
	int* p3 = (int*)100; // p3์— 100๋ฒˆ์ง€ ์ €์žฅ
	double* p4 = (double*)100; //p4 ์— 100๋ฒˆ์ง€ ์ €์žฅ
	
	p1++; // ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ charํ˜• (1byte)์ด๊ธฐ ๋•Œ๋ฌธ์— p1์— ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’์ด 101์ด๋จ.
	p2++; // ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ shortํ˜• (2byte)์ด๊ธฐ ๋•Œ๋ฌธ์— p2์— ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’์ด 102๊ฐ€ ๋จ.
	p3++; // ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ intํ˜• (4byte)์ด๊ธฐ ๋•Œ๋ฌธ์— p3์— ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’์ด 104๊ฐ€ ๋จ.
	p4++; // ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ doubleํ˜• (8byte)์ด๊ธฐ ๋•Œ๋ฌธ์— p4์— ์ €์žฅ๋œ ์ฃผ์†Œ ๊ฐ’์ด 108์ด ๋จ.


	printf("p1์˜ ์ฃผ์†Œ : %d\np2์˜ ์ฃผ์†Œ : %d \np3์˜ ์ฃผ์†Œ : %d \np4์˜ ์ฃผ์†Œ : %d", p1, p2, p3, p4);
}

 

 

 

 

 

 

 

ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ

 

int *p ๋ผ๊ณ  ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ int ์ž๋ฃŒํ˜•์€ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

 

ํฌ์ธํ„ฐ๋Š” 32bit์ปดํ“จํ„ฐ(os) ๊ธฐ์ค€ 4byte๋กœ ์ •ํ•ด์ ธ์žˆ๊ณ , ์œ„์— ํฌ์ธํ„ฐ ์•ž์— ์จ์ฃผ๋Š” ์ž๋ฃŒํ˜•์€ ๊ฒฐ๊ตญ

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p์— ์ผ๋ฐ˜ ๋ณ€์ˆ˜ data์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ data ๋ณ€์ˆ˜์˜ ๊ฐ’์„

๋ณ€๊ฒฝํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋‘ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•์„ ๊ฐ™๊ฒŒ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

 

์ฆ‰ ์‹ค์ œ ๋Œ€์ƒ ํฌ๊ธฐ๊ฐ€ 4byte๋ผ๋ฉด ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ์ž๋ฃŒํ˜•๋„ 4byte ํฌ๊ธฐ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

 

 

 

int data = 0;

int *p = &data; 

 

์ด๋ ‡๊ฒŒ ๋‘ ๊ฐœ์˜ ์ž๋ฃŒํ˜•์ด ๊ฐ™์•„์•ผ ํ•œ๋‹ค.

 

๋งŒ์•ฝ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฅดํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์™€ ์‹ค์ œ ๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ์—” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?

 

์‹ค์ œ ํฌ๊ธฐ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ

 

ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฅดํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํฌ๊ธฐ์™€ ์‹ค์ œ ๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ ๊ผญ ๊ฐ™์•„์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์˜๋„์ ์œผ๋กœ ์ด ๋‘ ํฌ๊ธฐ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

int data = 0; 

short *p = (short *)&data;

 

์œ„ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด, data๋Š” int ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ, short๋กœ ํ˜•๋ณ€ํ™˜์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p๋Š” 2byte์˜ ํฌ๊ธฐ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ,

4byte ํฌ๊ธฐ์ธ data ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 

์ด๋Ÿฌํ•œ ํฌ์ธํ„ฐ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜๋ฉด 4byte ํฌ๊ธฐ์˜ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ 1byte ๋‹จ์œ„๋กœ ์ถœ๋ ฅํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋‹ค์Œ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž. 

#include<stdio.h>

void main()
{
	int data = 0x12345678, i;
    
	char* p = (char*)&data;
    
	/*4๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด 4๋ฒˆ ๋ฐ˜๋ณตํ•จ */
    
	for (i = 0; i < 4; i++) {
		printf("%X ", *p); //p๋Š” char *ํ˜•์ด๋ผ์„œ ์‹œ์ž‘ ์ฃผ์†Œ๋ถ€ํ„ฐ 1byte ํฌ๊ธฐ๋งŒ ์‚ฌ์šฉํ•จ.
		p++; // p๊ฐ€ char * ํ˜•์ด๋ผ์„œ 1byte๋’ค์— ์žˆ๋Š” ์ฃผ์†Œ๋กœ ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ.
	}
}

 

 

 

 

 

์ด์™€ ๊ฐ™์ด *p๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด data ๋ณ€์ˆ˜์˜ ์‹œ์ž‘ ์ฃผ์†Œ์—์„œ 1byteํฌ๊ธฐ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

"ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ ์—ฐ์‚ฐ์„ ํ™œ์šฉํ•˜๋ฉด data๋ณ€์ˆ˜์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„๋„ 1byte์”ฉ ์‚ฌ์šฉ ๊ฐ€๋Šฅ!"

 

๋ฐฐ์—ด์‹์˜ ํ‘œํ˜„์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ˜๋ณต๋ฌธ๋งŒ ๋ณ€๊ฒฝํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

 

 

 

void *ํ˜• ํฌ์ธํ„ฐ

 

๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋Š” ํฌ์ธํ„ฐ๋ฅผ void * ํ˜• ํฌ์ธํ„ฐ๋ผ๊ณ  ํ•œ๋‹ค.

์œ„์—์„œ๋Š” ํ•ญ์ƒ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๋ฅผ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ, ์ด ํฌ๊ธฐ๋ฅผ ๋ชจ๋ฅธ๋‹ค๋ฉด ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์„

์‚ฌ์šฉํ• ๊นŒ??

 

 

์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ void ํ‚ค์›Œ๋“œ ์ด๋‹ค.

 

void๋Š” '์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋‹ค' ๋ผ๋Š” ์˜๋ฏธ๋กœ 

 

void * p;์™€ ๊ฐ™์ด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด ํฌ์ธํ„ฐ ๋ณ€์ˆ˜p์— ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ํ•ด๋‹น ์ฃผ์†Œ์—์„œ 

๊ฐ’์„ ์ฝ๊ฑฐ๋‚˜ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํฌ๊ธฐ๋Š” ์ •ํ•ด์ ธ ์žˆ์ง€ ์•Š๋‹ค.

 

 

์ฆ‰ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋งŒ ์•Œ๊ณ  ๋ ์ฃผ์†Œ๋ฅผ ๋ชจ๋ฅผ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํฌ์ธํ„ฐ ํ˜•์‹์ด๋‹ค.

 

 

 

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

 

๊ทธ๋ ‡๋‹ค๊ณ  void * ๋กœ ์„ ์–ธํ•œ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์ฃผ์†Œ ๊ฐ’๋งŒ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.

 

ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ data ๋ณ€์ˆ˜์— ๊ฐ’ 5๋ฅผ ๋Œ€์ž…ํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ, ํ˜• ๋ณ€ํ™˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ

 

'์‚ฌ์šฉํ•  ํฌ๊ธฐ'๋ฅผ ํ‘œ๊ธฐ ํ•ด์ฃผ๋ฉด ์ผ๋ฐ˜ ํฌ์ธํ„ฐ ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

*(int *)p ๋ผ๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ์ผ์‹œ์ ์œผ๋กœ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p์˜ ํ˜•์‹์ด int* ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํฌ์ธํ„ฐ ๋ณ€์ˆ˜ p์— ์ €์žฅ๋œ

์ฃผ์†Œ์— ๊ฐ€์„œ 4byte ํฌ๊ธฐ๋กœ 5๋ฅผ ์ €์žฅํ•œ๋‹ค.

 

 

 

#include<stdio.h>

void main() {
	
    int data = 0; 
    void * p = &data;
    *p = 5; //์˜ค๋ฅ˜ ๋ฐœ์ƒ : ๋Œ€์ƒ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ ์ง€์ • x
    
    // ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ *(int *)p = 5; ๋กœ ํ˜•๋ณ€ํ™˜ ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์ฃผ์–ด์•ผ ํ•จ.


}

 

 

void *๋Š” ์‚ฌ์šฉ ์‹œ ํ•ญ์ƒ ์บ์ŠคํŒ…์„ ๋™๋ฐ˜ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๋‹ค.

 

 

 

๊ทธ๋Ÿผ void * ํ˜• ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ?

 

 

void * ๋Š” ํฌ์ธํ„ฐ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

 

์ž์‹ ์ด ์‚ฌ์šฉํ•  ๋Œ€์ƒ์˜ ํฌ๊ธฐ ์ง€์ •์„ ์ž ์‹œ ๋ฏธ๋ฃฐ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด char * ํ˜• ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๋ฉด char *ํ˜• ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ ,

int * ํ˜• ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜๋ ค๋ฉด int * ํ˜• ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ void * ํ˜• ๋ณ€์ˆ˜๋Š” char * ํ˜•์ด๋“ , int * ํ˜•์ด๋“  ํ˜• ๋ณ€ํ™˜ ์—†์ด ๋ชจ๋‘ ์ €์žฅ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ํŽธ๋ฆฌํ•˜๋‹ค.

 

 

 

์ด์— ๋Œ€ํ•œ ์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์ž.

ex) main ํ•จ์ˆ˜์— ์„ ์–ธํ•œ ์ง€์—ญ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์„œ ๊ทธ ์ฃผ์†Œ์— ํ•ด๋‹นํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ๊ฐ’ 1์„ ๋Œ€์ž…ํ•˜๋Š” MyFuncํ•จ์ˆ˜๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

๊ทธ๋Ÿฐ๋ฐ MyFunc์œผ๋กœ ์ „๋‹ฌ๋˜๋Š” ์ฃผ์†Œ์˜ ํ˜•์‹์ด char*, short*, int* ์ค‘ ํ•˜๋‚˜์ด๊ณ  ์ด ํ˜•์‹์€ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ?




์–ด๋–ค ํ˜•์‹์˜ ์ฃผ์†Œ ๊ฐ’์ด ์ „๋‹ฌ๋  ์ง€ ๋ชจ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์œ„ ์˜ˆ์‹œ์ฒ˜๋Ÿผ ์„ธ ๊ฐœ์˜ ํฌ์ธํ„ฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค.

์‹ค์ œ๋กœ ์‚ฌ์šฉํ•  ํฌ์ธํ„ฐ์—๋งŒ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ ,

๋‚˜๋จธ์ง€๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒ ๋‹ค๋Š” ๋œป์œผ๋กœ
NULL์„ ์ ๋Š”๋‹ค.


๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ MyFunc ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋Š” ์ฃผ์†Œ์˜ ํ˜•์‹์ด ๋” ๋งŽ์•„์ง„๋‹ค๋ฉด, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ ธ ๋ถˆํŽธํ•  ๊ฒƒ์ด๋‹ค.


์ด๊ฒƒ์„ void * ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜์ •ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

์œ„์™€ ๊ฐ™์ด void * ํ˜• ํฌ์ธํ„ฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ํ˜•์‹์˜ ์ฃผ์†Œ์ด๋“  ์ €์žฅํ•  ์ˆ˜ ์žˆ์ง€๋งŒ,
3๊ฐ€์ง€ ์ฃผ์†Œ ํ˜•์‹ ์ค‘์—์„œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ–ˆ๋Š”์ง€๋Š” ์•Œ ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ flag๋ผ๋Š” ์˜๋ฏธ ์žˆ๋Š” ๊ฐ’์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•จ๊ป˜ ์ „๋‹ฌํ•ด์•ผ ํ•œ๋‹ค.

 

 

void  * ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋Œ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ ์กฐ์ ˆํ•˜๊ธฐ

 

์‚ฌ์šฉ์ž๊ฐ€ type๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ง€์ •ํ•˜๋ฉด, ๊ทธ ํฌ๊ธฐ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.(1 = 1byte, 2 = 2byte ..)

 

#include<stdio.h>

int GetData(void* p_data, char type)
{
	int result = 0;
	//type ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํ˜• ๋ณ€ํ™˜์„ ๋‹ค๋ฅด๊ฒŒ ํ•จ.
	if (type == 1)result = *(char*)p_data; //0x78(1byte)์ด ์ €์žฅ๋จ ->๋ฆฌํ‹€์—”๋””์•ˆ ๋ฐฉ์‹์ด๋ผ ๊ฑฐ๊พธ๋กœ ์ €์žฅ๋จ.
	else if (type == 2) result = *(short*)p_data; // 0x5678(2byte)์ด ์ €์žฅ๋จ.
	else if (type == 4) result = *(int*)p_data; // 0x12345678(4byte)์ด ์ €์žฅ๋จ.
	return result;

}

void main()
{
	int data = 0x12345678;
	// data ๋ณ€์ˆ˜์—์„œ 2byteํฌ๊ธฐ ๋งŒํผ๋งŒ ์ถœ๋ ฅ.
	printf("%X\n", GetData(&data, 2));
}

 

 

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.