안녕하세요. 오늘은 포인터의 활용에 대해 알아보겠습니다.
1. 데이터 변환
*포인터 미사용
int형(32비트) 변수에 어떤 값이 있고 이 값을 8비트씩(char형) 쪼개서 저장하는 코드입니다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <stdio.h>
int main()
{
int i_A=0b00000100000000110000001000000001;//32비트,00000100 00000011 00000010 00000001
char c_B[4];//8비트
c_B[0] = (i_A>>0) & 0b11111111;
c_B[1] = (i_A>>8) & 0b11111111;
c_B[2] = (i_A>>16) & 0b11111111;
c_B[3] = (i_A>>24) & 0b11111111;
printf("c_B[0] : %d \n",c_B[0]);
printf("c_B[1] : %d \n",c_B[1]);
printf("c_B[2] : %d \n",c_B[2]);
printf("c_B[3] : %d \n",c_B[3]);
}
|
cs |
출력값
- 2진수 표현을 위해 0b를 사용했습니다.
- 쉬프트 연산을 이용해서 8비트씩 좌측으로 옮겼고, &연산을 통해서 1인 값을 추출했습니다.
*포인터 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#include <stdio.h>
int main()
{
int i_A=0b00000100000000110000001000000001;//32비트,00000100 00000011 00000010 00000001
char *p_C = (char *)&i_A;
printf("p_C[0] : %d \n",p_C[0]);
printf("p_C[1] : %d \n",p_C[1]);
printf("p_C[2] : %d \n",p_C[2]);
printf("p_C[3] : %d \n",p_C[3]);
}
|
cs |
- 데이터 타입을 맞춰주기 위해 (char *)을 사용했습니다
- p_C는 포인터이므로 배열 같은 느낌이 있습니다
2.데이터 직렬화
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
|
#include <stdio.h>
typedef struct
{
int i;
char c;
}packet;
int main()
{
packet p;
int i;
char buf[1024];
char *c;
p.i = 1;
p.c = 2;
c = (char *)&p;
printf("%d \n",sizeof(packet));
for(i = 0; i<sizeof(packet);i++)
{
buf[i]=c[i];
printf("i:%d buf[%d]:%d c[%d]:%d\n",i, i, buf[i],i,c[i]);
}
}
|
cs |
3. 파라메터 전달
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
|
#include <stdio.h>
typedef struct
{
int a[1000];
}st;
st s2;
void f1(st s)
{
}
void f2(st *s)
{
}
void call1()
{
st s1; //스택사이즈 증가
f1(s1);
}
void call2()
{
f2(&s2);
}
int main()
{
call1(); // 스택사이즈가 데이터타입 st크기만큼 커짐
call2(); // 스택사이즈가 커지지않음
}
|
cs |
4. 함수포인터
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#include <stdio.h>
int callBack(int a)
{
return a;
}
int (*p_func)(int);
int main()
{
p_func = callBack;
printf("%d \n",(*p_func)(1) ); //호출방법1
printf("%d \n",p_func(2) ); //호출방법2
}
|
cs |
사용 예시: 어떤 이벤트 발생 시점에 함수포인터 변수로 함수 호출을 가변적으로 할 때 사용함
'프로그래밍 언어 > C언어' 카테고리의 다른 글
C언어 Storage Class, Auto, Register, Extern, Static이란? (0) | 2022.01.10 |
---|---|
C언어로 지수구하기 (0) | 2021.12.20 |
C언어 문자열 검색하기 (0) | 2021.06.07 |
동적메모리할당 2편 (0) | 2021.05.05 |
동적메모리할당 1편 (0) | 2021.05.04 |