구조체란? / C

Tkdyun·2024년 2월 9일

분분한 낙화

목록 보기
5/9

구조체란?

  • 데이터 타입이 다른 데이터들을 다루기 위해 C언어의 기본 타입을 가지고 사용자가 새롭게 지정할 수 있는 사용자 정의 타입
    배열은 같은 데이터 타입 (int, char, float 등)만을 묶어서 데이터를 저장할 수 있다.

  • 하지만 학생의 이름, 키, 나이 등을 저장하는 경우와 같이 서로 다른 데이터 타입을 처리하고 싶을 때
    구조체를 이용해 사용자가 데이터 값을 다룰 수 있다.

  • 이때, 구조체 내에서 다루는 데이터를 필드 라고 이야기하고 { } 안에 필드를 선언해야한다.
    그리고 각각의 데이터들은 멤버변수 라고 표현한다.
    구조체는 구조체 변수를 선언해서 이용할 수 있다.

struct student{ //struct (구조체이름)
	 int age;	// 필드 선언
     char name[10];	// 변수 선언과 동일하게	(멤버변수의 타입)	(멤버변수의 이름) 으로 선언
     float height;
};

struct student mystudent; //구조체 변수 선언해서 구조체를 이용할 수 있다.

자바의 class 가 구조체에서 발전된 개념이다.

  • typedef 키워드를 이용해 이미 존재하는 타입에 새로운 이름을 붙일 수 있다.
    -> 구조체에 새로운 이름을 선언하면 매번 struct 키워드를 사용하지 않아도 됨.
typedef struct 구조체이름 구조체의 새로운이름;

typedef struct student{
	int age;
    char name[10];
    float height;
 	...
}stu;
// 구조체의 정의와 typedef 선언을 동시에 할 수 있다.

-> main 문에서 struct student (변수이름) 으로 구조체 선언하던걸
stu (변수이름) 으로 간편하게 사용할 수 있다.

  • 구조체의 멤버 접근하는 방법
student.age
  • 구조체 멤버 변수 초기화하는 방법은
    멤버 연산자 (.) 과 중괄호 {} 를 사용
student = {.age=10, .name="basamg", height = 180.5, ...};
// 나머지 멤버 변수는 0으로 초기화 된다.

구조체의 주소와 구조체의 첫 번째 멤버의 주소는 같다.

  • 구조체 사용 예제
#include <stdio.h>

typedef struct student{
	int age;
	char name[5];
	float height;
}school;

int main(){
	school stu1 = {.age=10, .name="basam", .height=180.5};
	school stu2 = {.age=20, .name="amy", .height=160.5};
	
	printf("학생1 %d %s %.1f\n",stu1.age, stu1.name, stu1.height);
	printf("학생2 %d %s %.1f",stu2.age, stu2.name, stu2.height);
}

연산자

  • '->' 연산자
    (.) 도트 연산자와 마찬가지로 접근을 의미
    student.name = student->name

구조체 배열 생성과 접근 방법

#include <iostream>
using namespace std;
typedef struct temp{
	int TEMP;
}t;
int main(){
	t* ex = new t[10];
	
	t* test1 = new t;
	test1->TEMP=0;
	ex[0] = *test1;
	delete test1;
	t* test2 = new t;
	test2->TEMP=3;
	ex[1] = *test2;
	delete test2;
	t* test3 = new t;
	test3->TEMP=5;
	ex[2] = *test3;
	delete test3;
	
	cout<<ex[2].TEMP;
}

구조체 배열 생성 방법

선언한 구조체 타입의 포인터 변수를 생성하고

선언한 구조체 타입의 자료형을 저장할 수 있는 배열을 new 함수로 메모리 동적할당을 해준다.

배열의 원소로 넣을 새로운 포인터 변수를 설정해주고 메모리 할당 후 구조체 내부 멤버 변수를 설정 후
새로운 포인터 변수를 배열에 넣어준다.
-> 그럼 배열 안에 할당된 메모리 공간을 저장하고 참조할 수 있게 된다.

profile
"Hello World"

0개의 댓글