일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 알고리즘
- mongoDB
- Algorithm
- c언어
- JavaScript
- 디자인 패턴
- Galera Cluster
- C
- JPA
- Proxy
- 자료구조
- Data Structure
- Spring
- design pattern
- react
- Kafka
- 네트워크
- 운영체제
- MySQL
- 자바
- 파이썬
- 백준
- Heap
- redis
- Java
- 컴퓨터구조
- OS
- IT
- spring webflux
- MSA
Archives
- Today
- Total
시냅스
C언어 Struct : 구조체, 구조체 포인터, 구조체 메모리 본문
구조체
구조체는 여러 정보들을 한 데 묶어주는 역할을 한다.
기본적인 use case 는 아래와 같다.
struct Person { // 구조체
char name[10]; // 구조체 멤버
int age;
char address[100];
}
/*
struct Person { // 구조체
char name[10]; // 구조체 멤버
int age;
char address[100];
} p1;
위와 같이 p1을 붙여 줄 경우 바로 p1이라는 변수를 선언한 것
*/
struct Person p1; // 구조체 변수 선언
strcpy(p1.name, "김명수"); // 구조체 멤버에 값 할당
p1.age = 1;
strcpy(p1.address, "서울특별시 강남구")
typedef를 통해 struct 키워드를 제외할 수 있는 경우는 아래와 같다.
typedef struct _Person // _Person은 구조체 이름
{
char name[10];
int age;
char address[100];
} Person; // 별칭
Person p1; // 구조체 별칭을 통해 변수 선언
typedef struct // 구조체 이름을 생략하고
{
char name[10];
int age;
char address[100];
} Person; // 별칭 선언
Person p1; // 별칭을 통해 변수 선언
구조체 포인터
일반적인 포인터와 마찬가지로, 구조체를 가리켜 활용할 수 있다.
메모리를 할당할 때에도 malloc을 사용한다.
typedef struct _Person
{
char name[10];
int age;
char address[100];
} Person;
Person p1;
Person *ptr;
ptr = malloc(sizeof(Person));
// ptr = &p1; 다음과 같이 주소를 대입 해 줄 수도 있다.
p1->age = 30; // 화살표 연산자를 통해 변수를 대입해준다.
구조체 메모리
구조체는 멤버 중 가장 큰 자료형의 크기를 배수로 정렬한다.
만약 멤버가 char 1개와, int 한 개일 경우 char의 3byte가 남는데, 이는 남는 공간(패딩)으로 둔다.
typedef struct _Person
{
char a; // 1byte
int b; // 4byte
} Person;
int main()
{
Person p1;
printf("%d", sizeof(p1.a)); // 1
printf("%d", sizeof(p1.b)); // 4
printf("%d", sizeof(p1)); // 8 구조체 전체 크기
printf("%d", sizeof(struct Person)); // 8
}
'C' 카테고리의 다른 글
C언어 fd : 파일 디스크립터 (File Descriptor) (0) | 2022.03.26 |
---|---|
C언어 restrict 포인터, static 키워드 (0) | 2022.03.12 |
Makefile : 컴파일을 쉽게 하자! (0) | 2022.03.10 |
C언어 파일 모드 정리 (0) | 2022.01.01 |
C언어 string 관련 함수 정리 (0) | 2021.12.29 |
Comments