7.1.4 구조체 배열
동일한 구조를 갖는 구조체 변수가 여러 개 사용 될 때 그 구조체 변수들을 대표하는 배열명을 설정하여 일반 배열과 같이 사용
- 구조체 배열의 예
> 3명의 개인 신상정보를 저장하기 위한 구조체 배열 선언
struct person{ charname[8]; int age; charsex; }X[3]; |
struct person{ charname[8]; int age; charsex; }; structpersonX[3]; |
- 구조체 배열의 기억공간 표현
struct person{
char name[8];
int age;
char sex;
};
struct person X[3];
(1) 구조체 배열의 초기화
(2) 구조체 배열의 멤버 참조
strcpy(X[1].name, "홍길동"); >> 구조체배열 2번째 요수 name에 "홍길동"을 저장 X[2].sex = 'M'; >> 구조체배열 3번째 요소 sex에 'M'을 저장 K = X[2].age; >> 구조체배열 3번째 요소인 age 멤버값을 변수 K에 저장 |
// 구조체 배열의 사용
#include <stdio.h>
void main(){
struct person{
char *name;
int age;
char sex; };
struct person X[3] = {{"홍길동", 20, 'M' }, {"황진이", 22, 'F'}, {"임꺽정", 30, 'M'}}; // 구조체 배열의 초기화
int i, sum = 0;
for(i=0; i<3; i++){
printf("이름 : %s 나이 :%d 성별 :%c \n", X[i].name, X[i].age, X[i].sex);
// 구조체 배열의 멤버를 참조
sum = sum + X[i].age; }
printf("나이합 : %d", sum) ; }
7.1.5 구조체 포인터
> 포인터를 사용하여 구조체를 다룰 수 있게 함
- 구조체를 보다 쉽게 다룰 수 있다.
- 구조체변수 선언시 * 를 붙여 포인터로 선언
- 구조체 포인터는 포인터와 동일하게 주소값을 갖게 되며, 자료가 있는 곳을 가르킨다.
(1) 구조체 포인터 선언
- 형식 : struct 구조체명 *포인터변수명; - 사용 예 : struct person *pt; |
* 구조체 배열의 선언 예
struct person{
charname[8];
int age;
charsex; };
struct person man; >> 구조체 변수 man 선언
struct person*pt; >> 구조체 포인터 변수 pt 선언
pt = &man; >> 구조체 포인터 변수의 초기화
(2) 구조체 포인터의 멤버 참조
- 도트 연산자 ( . ) 를 이용 (*pt).name - 포인터 연산자 (->)를 이용 pt -> name |
// 구조체 포인터의 사용 예
#include <stdio.h>
struct student{
char name[10];
int kor;
int math;
};
void main(){
struct student hs[4]= {{"KIM HG",90,95},{"LEE SY",85,90},{"PARK GS",70,85},{"CHOI HJ",95,75}};
//구조체 변수의 선언 및 초기화
struct student *p; // 구조체 포인터 선언
p=hs; // 구조체 포인터 변수에 구조체의 시작 주소를 대입. p는 ha[0]를 가리키게 됨
printf("%s %d %d \n", p->name, p->kor, p->math);
p+=3;
printf("%s %d %d \n", p->name, p->kor, p->math);
p--;
printf("%s %d %d \n", p->name, p->kor, p->math); }
'방송통신대학 > C 프로그래밍' 카테고리의 다른 글
구조체struct 의 비트필드 bit field (0) | 2020.06.14 |
---|---|
함수function와 구조체struct (2) | 2020.06.13 |
구조체 struct (0) | 2020.06.11 |
포인터와 배열 pointer array (0) | 2020.06.10 |
포인터와 배열 char pointer , array (0) | 2020.06.09 |