자료구조

[자료구조 기초] structure, 구조체

aliceintr 2021. 4. 13. 10:46
반응형

 

이번 포스팅은 구조체에 대해 알아보고자 한다.

배열과 다른 구조체의 가장 큰 특징은 배열은 같은 데이터 타입만 저장할 수 있지만 구조체는 서로 다른 데이터 타입을 갖는 여러 요소들을 하나의 묶음으로 표현이 가능하다는 것이다.

각 요소가 각각의 타입과 변수 이름을 갖는다

 

 


구조체 선언방법

1) 구조체 정의와 변수로 선언

struct Person{
	char name[10];
    int age;
    float salary;
};

struct Person person1;

2) 정의와 동시에 선언

struct Person{
	char name[10];
    int age;
    float salary;
}person1;

3) 구조체 이름 생략

struct{
	char name[10];
    int age;
    float salary;
}person1;

 

Example

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

struct Person{
	char  name[10];
	int   age;
	float salary;
};

void main(){
	
	struct Person person1; // 구조체 변수 person1 선언
	strcpy(person1.name, "tom"); //strcpy 함수를 사용해서 문자열 저장
	person1.age = 10; //person1.age에 10 값 저장
	person1.salary = 40000; //person1.salary 에 40000값 저장
	
	printf("name : %s, age : %d, salary : %f\n", person1.name, person1.age, person1.salary);
}
name : tom, age : 10, salary : 40000.000000

구조체 타입

구조체 타입을 선언한 후, 구조체 변수를 선언

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

typedef struct {
	char  name[10];
	int   age;
	float salary;
}personType;

void main(){
	
	personType person1; // 구조체 변수 person1 선언
	strcpy(person1.name, "tom"); //strcpy 함수를 사용해서 문자열 저장
	person1.age = 31; //person1.age에 10 값 저장
	person1.salary = 40000; //person1.salary 에 40000값 저장
	
	printf("name : %s, age : %d, salary : %f\n", person1.name, person1.age, person1.salary);
}
name : tom, age : 31, salary : 40000.000000

구조체 배열

#include <stdio.h>


typedef struct {
	char  name[10];
	int   age;
	float salary;
}personType;


void main(){
	personType students[5];
}

구조체 포인터

구조체 변수 역시 포인터로 선언이 가능하다.

. 연산자가 * 연사자에 우선순위가 있어서 반드시 (*p). age라고 사용해야 한다. *p.age (X)

p -> age 도 사용 가능하다.

#include <stdio.h>

typedef struct {
	char  name[10];
	int   age;
	float salary;
}personType;

void main(){
	personType student; // 구조체 변수 선언
	personType *p, *q; // 구조체 포인터 선언
	
	p = &student; // 구조체 포인터 p 가 student 를 가리킴
	q = malloc(sizeof(personType))// personType 의 구조체 동적 메모리 할당
}

 

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

typedef struct {
	char  name[10];
	int   age;
	float salary;
}personType;

void main(){
	personType student; // 구조체 변수 선언
	personType *p = &student; // 구조체 포인터 p 가 student 를 가리킴
	strcpy(student.name, "davi");
	p -> age = 24;
	student.salary = 24000;
	
	printf("student age is %d\n", p->age);
	printf("student salary is %f\n", p->salary);
	printf("student name is %s\n", p->name);

}

 


Exercise

#include <stdio.h>

struct student{
	char s_num[5]; //student number
	char s_name[10]; //student name
	int year; // the year of enter
};

void main(){
	struct student a = {"S001","Peter",2021};
	struct student b = {"S002","Jane",2022};
	
	if (a.year > b.year)
		printf("%s\n",a.s_name);
	else
		printf("%s\n",b.s_name);
	
	
	//result : Jane
}
#include <stdio.h>
#include <malloc.h>

typedef struct charNode{
	
	char ch;
	struct charNode *p;
	
}nodeType;

void main(){
	nodeType *node1, *node2;
	node1 = (nodeType*)malloc(sizeof(nodeType));
	node1 -> ch = 'X';
	node1 -> p = NULL;
	
	node2 = (nodeType*)malloc(sizeof(nodeType));
	node2 -> ch = 'Z';
	node2 -> p = NULL;
    // node1 이 node2 가리키도록 하는 함수 
    node1 -> p = node2;
}

반응형