C - 구조체
배열
일련의 동일한 타입의 데이터를 다룰 때 배열을 이용.
배열의 한계
동일한 데이터 타입에 대해서만 기억공간을 만들 수 있다.
구조체
틀을 구성한다.
기억공간에 틀을 만든다.
struct StructEx {
int int1;
char char1;
};
main() {
struct StructEx s;
s.int1 = 3;
s.char1 = 'h';
}
구조체에서 확보한 메모리의 크기
struct table {
int no;
char irum[10];
int nai;
float sinjang;
char juso[20];
} // 42byte
strcpy() 메서드
구조체가 갖는 문자열은 my.irum = “홍길동” 처럼 담지 못한다.
strcpy() 메서드를 이용한다.
#include <string.h>
#include <stdio.h>
main() {
...
strycpy(my.irum,"홍길동");
}
strcmp() 메서드
문자열 비교할 때 사용.
strncmp() 메서드
두 개의 문자열을 비교했을 때, 같으면 0을 반환.
#include <stdio.h>
struct person {
int nai;
char name[10];
char sung;
int k,e,m;
float avr;
};
main() {
struct person p[] = {
{24,"kim",'M',90,85,64,0},
{25,"chung",'M',85,82,88,0},
{19,"lee1",'W',80,80,78,0},
{29,"lee2",'M',78,83,77,0},
{26,"lee3",'W',98,85,77,0},
{0,}
};
int i;
for(i=0;p[i].nai!=0;i++)
printf("%s\n",p[i].name);
}
Y2K문제
얕은 복사, 깊은 복사
#include <stdio.h>
struct kbs {
int a;
char b;
};
main() {
struct kbs k = {12, b};
struct kbs s;
s = k; // 얕은 복사
s.a = k.a; // 깊은 복사
s.b = k.b; // 깊은 복사
}
-> 기호
#include <stdio.h>
struct kbs {
int a;
char b;
};
main() {
struct kbs k = {12, b};
struct kbs *s;
printf("%d %c\n", k.a, k.b);
s = &k;
printf("%d %c\n", (*s).a, (*s).b);
printf("%d %c\n", s->a, s->b); // 표기가 조오금 더 쉬어짐.
}
기말시험 예상
구조체를 이용하여 기억공간을 설정할때, 배열을 이용
#include <stdio.h>
struct injuk {
int no;
char irum[10];
char gender;
int nai;
float sinjang;
char juso[20];
};
main() {
struct injuk dat[8] = { {1,"홍길동",'m',24,180.5,"인사동"},
{2,"백일홍",'w',15,165.4,"사직동"},
{3,"도루묵",'m',18,170.7,"마장동"},
{4,"백상어",'m',22,185.2,"인사동"},
{5,"진달래",'w',20,160.2,"인사동"},
{6,"변신술",'m',32,177.7,"마장동"},
{7,"고향길",'m',33,168.4,"이태원"},
{8,"심순애",'w',18,164.2,"사직동"} };
int i;
for(i=0;i<8;i++)
printf("%d %s %c %d %5.1f %s\n",
dat[i].no,dat[i].irum,dat[i].gender,
dat[i].nai,dat[i].sinjang,dat[i].juso);
}s
위의 코드에서 구조체 배열 dat를 가공하여 문제 활용.
main() {
struct injuk dat[8] = { {1,"홍길동",'m',24,180.5,"인사동"},
{2,"백일홍",'w',15,165.4,"사직동"},
{3,"도루묵",'m',18,170.7,"마장동"},
{4,"백상어",'m',22,185.2,"인사동"},
{5,"진달래",'w',20,160.2,"인사동"},
{6,"변신술",'m',32,177.7,"마장동"},
{7,"고향길",'m',33,168.4,"이태원"},
{8,"심순애",'w',18,164.2,"사직동"} };
int i;
#include <stdio.h>
struct injuk {
int no;
char irum[10];
char gender;
int nai;
float sinjang;
char juso[20];
};
main() {
struct injuk dat[8] = {
{1,"홍길동",'m',24,180.5,"인사동"},
{2,"백일홍",'w',15,165.4,"사직동"},
{3,"도루묵",'m',18,170.7,"마장동"},
{4,"백상어",'m',22,185.2,"인사동"},
{5,"진달래",'w',20,160.2,"인사동"},
{6,"변신술",'m',32,177.7,"마장동"},
{7,"고향길",'m',33,168.4,"이태원"},
{8,"심순애",'w',18,164.2,"사직동"}
};
int i, c=0, max=0,maxIndex=0;
for(i=0;i<8;i++) {
if(dat[i].nai>max) {
max = dat[i].nai;
maxIndex=i;
}
}
printf("%s %d\n",dat[maxIndex].irum,max);
}
#include <stdio.h>
struct injuk {
int no;
char irum[10];
char gender;
int nai;
float sinjang;
char juso[20];
};
int Count(struct injuk x[], int n1, int n2) {
int i, c=0;
for(i=0;i<8;i++) {
if(x[i].nai>=n1 && x[i].nai<n2) {
c++;
}
}
return c;
}
main() {
struct injuk dat[8] = { {1,"홍길동",'m',24,180.5,"인사동"},
{2,"백일홍",'w',15,165.4,"사직동"},
{3,"도루묵",'m',18,170.7,"마장동"},
{4,"백상어",'m',22,185.2,"인사동"},
{5,"진달래",'w',20,160.2,"인사동"},
{6,"변신술",'m',32,177.7,"마장동"},
{7,"고향길",'m',33,168.4,"이태원"},
{8,"심순애",'w',18,164.2,"사직동"} };
int cnt;
count
}
댓글남기기