반응형
이번 포스팅은 구조체에 대해 알아보고자 한다.
배열과 다른 구조체의 가장 큰 특징은 배열은 같은 데이터 타입만 저장할 수 있지만 구조체는 서로 다른 데이터 타입을 갖는 여러 요소들을 하나의 묶음으로 표현이 가능하다는 것이다.
각 요소가 각각의 타입과 변수 이름을 갖는다
구조체 선언방법
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;
}
반응형
'자료구조' 카테고리의 다른 글
[자료구조 기초] Stack, 스택 (0) | 2021.04.14 |
---|---|
[자료구조 기초] 리스트, 선형 리스트, 단순 연결리스트, Linear List, Linked List (0) | 2021.04.13 |
[ 자료구초 기초] Array, 배열 (0) | 2021.04.13 |
[자료구조 기초] Pointer , 포인터 (0) | 2021.04.13 |
[자료구조 기초] 자료구조의 개념, 추상자료형, 알고리즘 성능 분석 (0) | 2021.04.13 |