구조체란 비빔밥 처럼 서로 다른 변수의 형태를 하나의 블록으로 묶어둔 것과 같다.
struct student{
char name[10];
int kor;
int eng;
float avg;
};
struct student s = {"Woo", 90, 80};
구조체 변수를 초기화 할 때는 중괄호 { } 안에 초기값을 콤마로 분리해서 대입한다.
#include<stdio.h>
#include<string.h>
void main(){
struct bibim{
int a;
float b;
char c;
char d[5];
};
struct bibim b1;
b1.a = 10;
b1.b = 1.1f;
b1.c = 'A';
strcpy(b1.d, "ABCD");
printf("b1.a ==> %d \n", b1.a);
printf("b1.b ==> %f \n", b1.b);
printf("b1.c ==> %c \n", b1.c);
printf("b1.d ==> %s \n", b1.d);
}
#include<stdio.h>
#include<string.h>
void main(){
struct student{
char name[10];
int kor;
int eng;
float avg;
};
struct student s[3];
int i;
strcpy(s[0].name, "Kim");
s[0].kor = 90;
s[0].eng = 80;
s[0].avg = (s[0].kor + s[0].eng) / 2.0f;
strcpy(s[1].name, "Lee");
s[1].kor = 70;
s[1].eng = 60;
s[1].avg = (s[1].kor + s[1].eng) / 2.0f;
strcpy(s[2].name, "Park");
s[2].kor = 90;
s[2].eng = 80;
s[2].avg = (s[2].kor + s[2].eng) / 2.0f;
printf("--구조체 배열--");
for(i = 0; i < 3; i++){
printf("학생 이름 ==> %s\n",s[i].name);
printf("국어 점수 ==> %d\n",s[i].kor);
printf("영어 점수 ==> %d\n",s[i].eng);
printf("평균 점수 ==> %5.1f\n",s[i].avg);
printf("\n");
}
}
구조체 포인터 변수도 구조체의 주소를 가지고 있다.
다른점이라고 하면
구조체 포인터가 가리키는 곳에 값을 할당해주기 위해서는 ' -> ' 화살표 연산자를 사용하여 값을 할당한다.
구조체 포인터를 생성할 때는 인반 포인터 변수를 생성할 때와 동일하게 * 참조 연산자를 생성 시에 변수명 앞에 위치시키면 된다.
Heap 영역에 필요한 칸큼 구조체의 크기만큼 생성을 할 때는 일반 포인터와 동일하게 malloc() 함수를 사용하면 된다
struct 구조체_이름 *포인터_이름 = malloc(sizeof(struct 구조체_이름));
#include<stdio.h>
void main(){
struct student{
char name[10];
int kor;
int eng;
float avg;
};
struct student s;
struct student *p;
p = &s;
printf("이름 입력 : ");
scanf("%s", p->name);
printf("국어 점수");
scanf("%d", &p->kor);
printf("영어 점수");
scanf("%d", &p->eng);
p->avg = (p->kor + p->eng);
printf("\n --- 구조체 포인터 활용 ---\n");
printf("학생 이름 ==> %s\n", p->name);
printf("국어 점수 ==> %d\n", p->kor);
printf("영어 점수 ==> %d\n", p->eng);
printf("국어 점수 ==> %5.1f\n", p->avg);
}
구조체 포인터와 메모리 할당 함수(malloc)를 이용하여 학생의 이름과 나이를 입력 받아 출력하는 프로그램을 작성하시오
실행결과
#include<stdio.h>
#include<string.h>
void main(){
struct student{
char name[10];
int age;
};
int count;
printf("입력할 학생 수 : ");
scanf("%d", &count);
struct student *p;
struct student s;
p = (struct student*) malloc(sizeof(s) * count);
for(int i = 0; i < count; i++){
printf("이름과 나이 입력 : ");
scanf("%s %d", p[i].name, &p[i].age);
}
for(int i = 0; i < count; i++){
printf("이름 : %s , 나이 : %d \n",p[i].name, p[i].age);
}
}