Jiyong's STUDY

구조체의 배열과 포인터의 선언과 -> 접근 본문

프로그래밍/C

구조체의 배열과 포인터의 선언과 -> 접근

Kingjiyong 2018. 5. 18. 03:25

구조체의 포인터와 배열


구조체도 자료형이므로 배열과 포인터를 사용할 수 있다.

구조체 배열과 포인터를 선언하는 방식은 매우 간단하다.


구조체 배열


typedef struct 

{

char name[20];

int number;

int score;

}students;


int main(){ // 함수를 사용하지 않은 방식

students stu[2]= {

{"김민수", 1, 100},

{"김영희", 2, 95}

};

printf("%d번 %s의 점수는 %d점 \n", stu[0].number, stu[0].name, stu[0].score);

printf("%d번 %s의 점수는 %d점 \n", stu[1].number, stu[1].name, stu[1].score);

}




typedef struct

{

char name[20];

int number;

int score;

}students;


void PrintStudentsInfo(students);


int main(){ // 함수를 사용한 방식

students stu[2]= {

{"김민수", 1, 100},

{"김영희", 2, 95}

};

PrintStudentsinfo(stu[0]);

PrintStudentsinfo(stu[1]);

}


void PrintStudentsInfo(students stu){

printf("%d번 %s의 점수는 %d점 \n", stu.number, stu.name, stu.score);

}


결과 >> 

1번 김민수의 점수는 100점

2번 김영희의 점수는 95점


이전에 배열에 대해서 제대로 공부했다면 전혀 어려운 내용이 아니다.

일반적인 배열의 선언과 사용 방법 또한 같기 때문이다.


구조체 포인터


typedef struct

{

char name[20];

int number;

int score;

}students;


int main(){

students stu={"김민수", 1, 100};

students *ptr=&stu;

printf("%d번 %s의 점수는 %d점", stu.number, (*ptr).name, ptr->score);

}


결과 >> 1번 김민수의 점수는 100점


마찬가지로 포인터에 대하여 공부를 하였다면

전혀 어려울 것이 없는 간단한 내용이다.


구조체 배열의 경우에는 일반적인 배열의 사용법과 완전히 같다고 보아도 과언이 아니었다.

하지만 구조체 포인터에는 다른 점이 하나가 있는데,


*연산을 이용해 포인터에 접근하는 방식 말고 다른 방식이 하나 더 있다.


위에 예제에도 사용을 했는데 (->) 연산을 이용하여 편하게 접근이 가능하다.


구조체 포인터의 이름 -> 멤버는

(*구조체 포인터의 이름).멤버 와 같은 연산이다.


-> 연산자는 자주 사용하므로 기억해야 한다!!

'프로그래밍 > C' 카테고리의 다른 글

열거형 enum의 정의, 설명  (0) 2018.05.25
공용체 union의 정의, 설명  (0) 2018.05.25
구조체 struct와 typedef 선언  (0) 2018.05.18
void 포인터  (0) 2018.05.16
함수 포인터  (0) 2018.05.16