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 를 사용함으로 접근 할 수 있다

업데이트: