자료실/C언어

C언어 - 구조체

자료수집중 2020. 6. 27.
반응형

배열은 자료형이 같은 데이터를 묶어서 사용할 수 있습니다.

자료형이 다른 데이터를 묶기 위해서는 배열을 사용할 수 없습니다.

이때 구조체를 사용해서 자료형이 다른 데이터들도 묶어서 사용할 수 있습니다.

 

구조체는 struct 키워드를 사용합니다.

기본 형식은

struct 구조체 이름
{
    //멤버
    자료형 이름;
    자료형 이름;
    자료형 이름;
    자료형 이름;
    .
    .
    .
};

구조체 내부의 선언된 변수들을 멤버라고 합니다.구조체 선언이 끝나고 마지막에 ;(세미콜론)을 꼭 붙어야 합니다.

 

구조체를 작성해보면서 다양한 선언 방식을 알아보겠습니다.

#include <stdio.h>

struct student {
    char name[20];
    int age;
    float grade;
};

int main(void) {

    struct student st1 ={ "홍길동", 20, 40.5 };

    return 0;
}

구조체를 사용하기 위해서는 구조체의 변수를 선언해야 합니다.함수 내부에 선언하면 지역변수가 되기 때문에 초기화를 해야 합니다.

 

전역 변수로도 선언이 가능합니다.

#include <stdio.h>

struct student {
    char name[20];
    int age;
    float grade;
};
struct student st1 = { "홍길동", 20, 40.5 };


구조체의 이름을 선언하지 않고 하는 방법도 있습니다.

대신 이때는 구조체를 정의할 때 변수도 같이 선언해야 합니다. 

struct student{
    char name[20];
    int age;
    float grade;
}st1, st2, st3;

// 구조체의 이름없이 정의 가능
struct {
    char name[20];
    int age;
    float grade;
}st1, st2, st3;

단점은 나중에 지역 변수 또는 선언한 변수보다 더 많이 변수가 필요해지면 추가로 선언할 수가 없습니다.

새롭게 구조체를 정의하거나 추가로 구조체 변수를 선언해야 합니다.

 

구조체의 정의와 변수를 따로 선언하는 경우에는 

구조체 변수를 선언하면서 초기화를 할 수 있습니다.

struct student st1 = { "홍길동", 20, 40.5 };

 

구조체의 멤버는.(멤버 연산자)를 이용해서 사용할 수 있습니다.

구조체에 값을 대입해서 사용할 수 있습니다.

printf("이름 : %s \n", st1.name);
printf("나이 : %d \n", st1.age);
printf("성적 : %f \n", st1.grade);

 

구조체에 값을 대입할 수도 있습니다.

st1.age = 20;
st1.grade = 40.5;

단 문자열은 조금 다릅니다. 일반 변수에 대입이랑 같게 하면 에러가 발생합니다.

st1.name = "홍길동"; //에러 발생

 

문자열은  strcpy()를 사용해 대입합니다.

strcpy()을 사용하기 위해서는 #include <string.h>를 선언해야 합니다.

strcpy(st1.name, "홍길동");

 

구조체도 배열을 선언할 수 있습니다.

struct student st1[40];


struct student st2[2]={
    {철수, 20, 40.5},
    {영희, 20, 60}
};


strcpy(st2[0].name, "홍길동");

 

 

구조체도 포인터로 선언이 가능합니다.

struct student st1 = { "홍길동", 20, 40.5 };
struct student* st2;
st2 = &st1;

printf("이름 : %s \n", st2->name); //printf("이름 : %s \n", (*st2).name); 도 가능
printf("나이 : %d \n", st2->age);
printf("성적 : %f \n", st2->grade);

->는 포인터에 대입된 변수에 접근하기 위한 연산자입니다.

 

구조체는 함수의 반환형, 매개변수로 사용 가능합니다.

#include <stdio.h>
#include <string.h>

struct student {
	char name[20];
	int age;
	float grade;
};

struct student list(struct student a) {
	struct student st;
	strcpy(st.name, "영희");
	st.age = a.age;
	st.grade = 56.5;

	return st;
}

int main(void) {

	struct student st1 = { "철수",20,65.4 };
	struct student st2;
	st2 = list(st1);
	printf("이름 : %s \n", st2.name);
	printf("나이 : %d \n", st2.age);
	printf("성적 : %f \n", st2.grade);

	return 0;
}

 함수의 반환형으로 사용할 때 struct 구조체 이름 + 함수 이름 앞에 선언돼야 합니다.

매개변수로 사용할 때도 같습니다. struct 구조체 이름 + 매개변수 이름을 적어야 합니다.

 

'자료실 > C언어' 카테고리의 다른 글

C언어 - 문자열과 포인터  (0) 2020.06.29
C언어 - 문자열  (0) 2020.06.29
C언어 - 배열  (0) 2020.06.23
C언어 - 변수의 생존기간과 저장 유형 지정자  (0) 2020.06.22
C언어 - 지역변수, 전역변수  (0) 2020.06.22

댓글