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
}

태그:

업데이트:

댓글남기기