C - 구조체

JinJinJara·2023년 8월 30일
0

TIL

목록 보기
2/19
post-thumbnail

구조체 (structure type)

사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입

1) 특징

  • 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현
  • 다양한 타입의 변수 집합하나의 타입으로 나타냄 (↔ 배열)
  • 같은 변수를 여러번 사용해야 할 때 효과적으로 사용
    ex) 학생들의 과목별 성적 관리

2) 기본 형태

// 구조체를 구별하기 위한 이름
struct 태그명

{
// 구조체 구성하는 변수(=멤버/멤버 변수) 선언
  멤버변수1의타입 멤버변수1의이름;

  멤버변수2의타입 멤버변수2의이름;

  ...
};

3) 선언 및 초기화

  • 구조체 안에 어떤 변수들이 들어가는지 알려주기
  • 구조체 형태만 정의한 것이므로 데이터 저장 X
  • struct 태그명 변수명; 형식으로 선언

a. 일반적인 형태

  • 재사용성이 높은 구조체는 필요할 때 인스턴스를 만들 수 있도록 설계되어 있다.
  • 따라서, 전역에서 쓰이기 위해 보통 main 함수 바깥에 정의한다.
  • 마지막 세미콜롬; 전에 변수 지정 가능하며 구조체 정의와 선언(S)을 동시에 가능하다

b. main 함수 내의 구조체

  • main 함수 안에서만 사용가능한 구조체

c. 이름없는 구조체

#include <stdio.h>

int main() {

 struct{
  int age;
  int grade;
 }tmp = {20, 1};
 
 printf("age = % d 살: grade = %d 학년\n" , tmp.age , tmp.grade);   
 return 0;
 
}
  • 구조체 선언부 외, 인스턴스 생성 불가
  • 가독성을 위해 태그 이름은 생략하지 않는 것이 좋음

📌 plus. 구조체 인스턴스

  • 구조체의 인스턴스는 멤버에 값을 저장하기 위한 메모리 영역을 개별적으로 보유
  • 선언 예시 ) struct Student s1, s2, s3;
    • s1, s2, s3 의 메모리 주소는 다르기 때문에 실제 관련 없다

4) 구조체 대입

: 같은 형태의 구조체 변수라면 다른 구조체 변수에 할당 가능한 것
: 인스턴스 복제하는 것으로 멤버값도 함께 복사됨

  • 예시1)
  • 예시2)
  • 모든 멤버를 통째로 복사하는 방법으로 메모리 사용량CPU에 부하가 발생하는 점에 주의!!

📌 plus : strcpy( )

char origin[] = "BlockDMask";
char dest[100];
strcpy(dest, origin);
: 함수의 이름은 str (=string), cpy (=copy)
즉, 문자열을 복사하는 함수
: origin에 있는 문자열 전체를 dest로 복사

0개의 댓글