//단순 구조체
#include<stdio.h>
struct score{
char name[20];
int kor, eng, mat;
};
typedef struct score Score;
void structPrint(char*, int, int, int);
void main()
{
Score sd = {"Hong gil dong", 80, 90, 100};
structPrint(sd.name, sd.kor, sd.eng, sd.mat);
}
void structPrint(char *cp, int i, int k, int j)
{
printf("%s : %d, %d, %d\n", cp, i, k, j);
}
// 중첩 구조체
#include<stdio.h>
struct AA{
int a;
long b;
};
struct BB{
int a;
long b;
struct AA c;
};
void main()
{
struct BB su;
su.a = 10;
su.b = 20;
su.c.a = 30;
su.c.b = 40;
printf("%d\n", su.a);
printf("%ld\n", su.b);
printf("%d\n", su.c.a);
printf("%ld\n", su.c.b);
}
// 비트 필드 구조체
#include<stdio.h>
struct AA{
int a : 3;
unsigned int b : 4;
int c : 2;
};
void main()
{
struct AA su;
su.a = 10;
su.b = 10;
su.c = -1;
printf("%d\n", sizeof(su));
//printf("%d\n", sizeof(su.a));
//printf("%d\n", sizeof(su.b));
//printf("%d\n", sizeof(su.c));
printf("%d\n", su.a);
printf("%u\n", su.b);
printf("%d\n", su.c);
}
//공용체 : 메모리를 같이 쓰자
#include<stdio.h>
union abc{
char a;
short b;
long c;
} value;
void main()
{
value.c = 0x12345678;
printf("%d\n", sizeof(value)); // 4byte
printf("long value : %08lx\n", value.c);
printf("short value : %08lx\n", value.b);
printf("char value : %08lx\n", value.a);
}
공용체는 써보면 알겠지만 상당히 특이하다. 즉 한 메모리를 가지고 이놈 저놈이 다 같이 쓰자는 것이다. 기본적으로 가장 큰 공간을 가지고 있는 놈을 기준으로 작은놈이 앞에서부터 중첩되서 메모리공간을 사용하게 된다.
//공용체와 구조체의 혼용
#include<stdio.h>
struct str{
char c1, c2, c3, c4;
};
union abc{
struct str chr;
char a; // 1byte
short b; // 2byte
long c; // 4byte
};
void main()
{
union abc value;
value.c = 0x12345678;
printf("a = %08x\n", value.a); // 00000078
printf("b = %08hx\n", value.b); // 00005678
printf("c = %08lx\n", value.c); // 12345678
printf("c1 = %08x\n", value.chr.c1); // 00000078
printf("c2 = %08x\n", value.chr.c2); // 00000056
printf("c3 = %08x\n", value.chr.c3); // 00000034
printf("c4 = %08x\n", value.chr.c4); // 00000012
}
즉 가장 큰 long형과 struct str형을 받아 총 4byte짜리 방이 생성된다. 그리고 출력 결과값을 보면 메모리는 앞칸 방부터 | 78 | 56 | 34 | 12 | 순으로 저장됨을 알수가 있다.
'Computer & Program > 잡다한 이모저모' 카테고리의 다른 글
const함수 사용 예 (0) | 2009.03.04 |
---|---|
#define, 매크로 사용 예 (0) | 2009.03.04 |
구조체를 통한 링크드 리스트의 예 (0) | 2009.03.04 |
문자열 출력 예 (0) | 2009.03.04 |
이름과 숫자 1~4까지의 답 10개를 입력 받아 O,X 표시 및 평균 및 최고득점자와 최소 득점자 출력하는 로직 (0) | 2009.03.04 |
댓글