C언어 구조체 1 구조체 선언,배열,포인터
title: “C언어 구조체 1 구조체 선언,배열,포인터” categories:
-
C
#C언어 구조체 1 구조체 선언,배열,포인터 : 네이버 블로그
드디어 구조체에 도달했습니다. 그럼 구조체란 무엇인가?
서로 다른 자료형을 하나로 묶는 것 입니다.
하나의 구조체에 여러개의 자료형을 넣을 수 있습니다.
구조체 선언
구조체 선언의 예시를 보면
struct student{
int number;
char name[10];
double grade;
}
가 있습니다
일단 구조체의 이름은 student가 됩나다. 그리고 그 구조체 안에 number, name, grade가 들어가 있는겁니다.
즉 student라는 구조체 안에 number, name, grade를 쓸 수 있습니다.
중요한 점은 구조체 선언은 틀일 뿐이고 구조체 변수가 아니라는 점을 명시해야 합니다.
즉 struct student a를 해야지 a라는 구조체 변수가 만들어지고 numbeer와 name, grade를 쓸 수 있습니다.
아래 예제를 보자
#include
struct student //구조체 선언
{
int num;
char name[20];
double grade;
};
int main() {
struct student a = { 1,"hong",3.8 }; //순서대로 num name grade
struct student b = { 2,"kim",4.0 };
printf("%d %s %f\n", a.num, a.name, a.grade);
printf("%d %s %f\n", b.num, b.name, b.grade);
}
a라는 구조체 변수를 선언하고 순서대로 num,name,grade가 된다.
변수를 사용하는 방법은 구조체변수의이름.구조체맴버이다.
즉 a.name을 하게되면 a안에 저장된 name의 맴버를 불러올 수 있다.
구조체는 구조체 맴버로도 가질 수 있고 배열로도 가질 수 있다.
구조체 맴버로 구조체를 사용하는 방법은
struct point{
int x;
int y;
}
struct rect{
struct point p1;
struct point p2;
}
를 하면 된다.
이후 메인안에서
struct rect r;을 하게되면
r.p1.x
r.p1.y
r.p2.x
r.p2.y
를 쓸 수 있게 된다.
구조체는 틀임을 명시해야한다.
구조체 배열을 선언하는 방법도 보자
처음에 보았단 student구조체가 있다
struct student{
int number;
char name[10];
double grade;
}
struct student a[2]을 하게 된다면
a[0].number
a[0].name
a[0].grade
a[1].number
a[1].name
a[1].grade
의 변수를 가지게 된다.
즉 구조체 배열임을 생각해야 한다.
구조체는 포인터로도 사용될 수 있다.
struct student s ={5,”Lee”,4.2} 구조체 변수 선언이다 여기에
struct student *sp sp라는 student 틀의 포인터를 선언하고
sp=&s s의 주로를 포인터변수 sp에 넣음으로서 구조체 포인터로 사용할 수 있다.
포인터의 접근으로 사용하는 구조체는
(*sp).number나 sp->number 를 사용함으로 접근 할 수 있다