C & C++

[C언어] 구조체 struct 선언, 멤버 변수 할당 및 접근 방법

jimmy_AI 2022. 5. 22. 16:57
반응형

C언어 구조체 선언 및 멤버 다루기

C언어에서 struct를 통한 구조체 객체를 선언해보고

구조체 내 멤버 변수를 할당하고 접근하는 방법에 대해서 살펴보도록 하겠습니다.

 

 

구조체란?

먼저, 구조체란 객체들이 특정 종류의 속성을 공통적으로 보유할 때,

해당 속성들을 객체 내에 종속시켜 한 묶음 단위의 형태로 선언하는 객체를 의미합니다.

 

예를 들어, '책'이라는 객체는 공통적으로 저자, 제목, 가격, 페이지 수 등의 속성을 공유합니다.

따라서, 책이라는 객체를 선언할 때 위의 속성들을 묶어서 한 단위처럼 취급한다면

가장 비싼 책을 뽑거나, 특정 저자의 책 제목 등을 가져올 때 유용하게 사용할 수 있을 것입니다.

 

 

구조체 struct 선언 방법, 멤버 변수란?

이름, 가격 및 카테고리 정보를 가지는 '상품'이라는 구조체를 생각해보겠습니다.

해당 구조체의 정의 및 선언은 아래 예시 코드의 틀로 진행해주시면 됩니다.

#include <stdio.h>

int main(){

// 구조체 정의
struct Product { // 구조체 변수 이름
    // 구조체 멤버 정의(문자열, 정수, 실수 등...)
    char name[30];
    int price;            
    char category[30];
};

// 구조체 변수 선언
struct Product p1;
struct Product p2;

}

멤버 변수는 구조체가 가지는 속성들을 의미합니다.

여기서는 name, price, category라는 세 가지 속성이 멤버 변수에 해당되며,

각각 char 배열, 정수 등의 고유한 자료형을 가지는 것을 확인할 수 있습니다.

반응형

구조체 멤버 변수 할당 및 접근

이제 위에서 선언한 구조체 변수 p1, p2에 대하여 멤버 변수 값을 할당하고

할당된 멤버 변수의 값에 접근해보겠습니다.

 

멤버 변수 값을 할당할 때 문자열 자료형이 아닌 경우는 p1.price = 1500처럼

변수명.멤버명 = 할당할 값 형태로 값을 선언해주시면 되는데,

문자열 자료형은 위의 방법으로 할당이 불가하고 string.h의 strcpy 함수를 사용하여

아래 코드처럼 할당해주셔야 합니다.

#include <string.h> // strcpy 함수 사용

// ... //

// 구조체 멤버 변수 할당
strcpy(p1.name, "choco milk"); // p1.name = "choco milk" 처럼 할당 불가
p1.price = 1500;
strcpy(p1.category, "food"); // p1.category = "food" 처럼 할당 불가

 

마찬가지로, p2의 멤버 값도 할당해보고 각 멤버 변수의 값에 접근하여 출력해보겠습니다.

// p2의 멤버 변수 할당
strcpy(p2.name, "t-shirts");
p2.price = 9900;
strcpy(p2.category, "clothes");

// 멤버 변수 접근 및 출력
printf("p1의 이름은 %s 이고, 가격은 %d원 이며, 카테고리는 %s 입니다.\n", p1.name, p1.price, p1.category);
printf("p2의 이름은 %s 이고, 가격은 %d원 이며, 카테고리는 %s 입니다.\n", p2.name, p2.price, p2.category);

 

멤버 변수의 값 접근 응용 사례로, 아래와 같이 더 비싼 상품의 이름을 출력하는 것도 가능합니다.

// 멤버 변수 값 비교 예시
if(p1.price > p2.price){
  printf("더 비싼 상품 이름은 %s 입니다.\n", p1.name);
}else if(p1.price < p2.price){
  printf("더 비싼 상품 이름은 %s 입니다.\n", p2.name);
}else{
  printf("두 상품의 가격은 같습니다.\n");
}
// 출력 결과 : 더 비싼 상품 이름은 t-shirts 입니다.

 

 

심화 : typedef를 이용한 더 편리한 구조체 선언

C언어에서는 구조체를 선언할 때, struct를 붙이지 않고도

아래처럼 더 편리하게 선언이 가능한 방식을 지원하고 있습니다.

// 기존 구조체 선언 방식
struct Product p1;

// typedef 이용 시 선언 방식
Product p2;

이는 자주 사용되는 구조체인 경우 더 유용할 수 있으며,

구조체 정의 단계에서 typedef를 이용하여 정의를 해주시면 됩니다.

 

이에 대한 상세한 설명 및 예시 코드는 아래 링크의 글을 참고해주세요.

 

C언어 구조체 struct 없이 선언 : typedef

C언어 구조체 typedef 이용 선언 방법 이번 글에서는 C언어에서 구조체 선언 시 struct를 앞에 붙이지 않고도 편리하게 사용할 수 있는 typedef를 이용한 선언 방법에 대해서 살펴보도록 하겠습니다.

jimmy-ai.tistory.com

이상으로 C언어 구조체의 기초에 대해서 다룬 글을 마치도록 하겠습니다. 감사합니다.