728x90
반응형
1. 구조체의 개념
구조체(strucure)란?
- 서로 다른 자료형을 갖는 자료들을 하나의 자료형으로 정의하여 사용하는 자료형
: 사용자 정의 자료형 - 다양한 형식의 자료를 간결하게 표현 가능
약간의 객체 지향적 성격을 갖는 자료형 같음
함수의 명사 버전 같기도 하다
2. 구조체의 정의와 변수 선언
구조체의 정의
- 형식 :
struct 구조체명{ 구조체 멤버 변수 1; 구조체 멤버 변수 2; };
구조체 변수 선언
- 형식: struct 구조체명 변수명1, 변수명2, 변수명3;
- 사용예 : struct score x, y[10], *z;
3가지의 방법 중 원하는 형태를 선택해서 사용하면 됨
구조체 정의와 변수 선언
// 형식 1
struct socre{
char name[8],
int math
}; struct score X;
//형식 2
struct socre{
char name[8],
int math
} X;
//형식 3 (typedef를 통해 구조체 이름으로 새로운 자료형을 정의할 수 있음)
typedef struct socre{
char name[8],
int math
} math;
math X;
3. 구조체 변수의 초기화 및 참조
struct person{
char name\[8];
int age;
};
struct person X = {"부평초", 20};
구조체 멤버의 참조
- 형식 : 구조체변수명.멤버변수명;
printf("person X의 age는 %d", X.age);
구조체의 기억공간 구조
- 구조체의 기억공간 할당은 가장 큰 자료형의 크기로 할당된다
- 8 byte 문자열, 4 byte int, 1 byte char를 사용하여 구조체를 만들면
char자료형은 가장 큰 자료형인 4byte로 할당되어 총 16byte로 생성됨
- 8 byte 문자열, 4 byte int, 1 byte char를 사용하여 구조체를 만들면
4. 구조체의 배열
구조체의 배열
- 동일한 구조를 갖는 구조체 변수가 여러개 사용될 때
구조체 변수들을 대표하는 배열명으로 일반 변수와 같이 사용 가능하다
구조체 배열의 예
struct persom{
char name\[8];
int age;
};
struct person X[3];
구조체 배열의 기억공간 표현
- 2차원 배열과 같은 모습
-> 행렬이나 데이터 프레임의 형태를 떠올리면 될듯
구조체 배열의 초기화
struct person X[3] =
{{"이름1", 20}.
{"이름2", 30},
{"이름", 32}};
구조체 배열의 멤버 참조
register i;
for (i=0; i<3; i++){
printf("X의 %d번째 person의 이름은 %s", i, X[i].name);
}
strcpy(X[1].name, "네임2"); // 구조체 배열 X의 두 번째 name에 네임2 저장(덮어쓰기)
X[0].age = 22; // 구조체 배열 X의 첫 번째 나이를 22로
5. 구조체 포인터
구조체 포인터
- 구조체를 보다 쉽게 다룰 수 있다
- 구조체변수 선언시 *을 붙여 포인터로 선언
- 구조체포인터는 구조체의 주소값읋 가지고 있음
구조체 포인터의 선언
형식 : struct 구조체명 *변수명;
struct person { char name[8]; int age; }; struct person man; struct person \*man_pointer; // man_pointer == &man;
구조체 포인터의 멤버 참조
- 도트 연산자( . ) 이용
: (*man_pointer).name; - 포인터 연산자 ( -> )를 이용
: man_pointer -> name
기억공간 표현
#include <stdio.h>
// main() 함수 밖에 구조체 정의
struct student {
char name[10];
int math;
};
void main(){
//구조체 초기화
struct student st[4] =
{{"kim", 90},
{"lee", 95},
{"park", 80}};
struct student *p; // 구조체 포인터 선언
p = st; // 구조체 포인터 변수에 구조체 시작 주소를 대입
printf("name = %s, score = %d, p -> name, p -> math); // kim, 90 출력
p += 1
// i=0, st[i] 일 때 i + 1 을 해주는 것과 같은 의미
printf("name = %s, score = %d, p -> name, p -> math);
// lee, 95 가 출력된다
반응형
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 - 파일처리 함수(1) (0) | 2021.03.26 |
---|---|
C언어 - 구조체와 공용체(2) (0) | 2021.03.23 |
C언어 - 10. 배열과 포인터 (3) (0) | 2021.03.17 |
C언어 - 9. 배열과 포인터(2) (0) | 2021.03.17 |
C언어 - 8. 배열과 포인터(1) (0) | 2021.03.16 |
댓글