728x90
반응형
#include <stdio.h>
#include <string.h>
struct Person
{
char name[20];
int age;
char address[100];
};
int main(){
struct Person p1;
strcpy(p1.name, "앵보");
p1.age = 28;
strcpy(p1.address, "광주광역시 광산구 월계동");
printf("이름 : %s\n", p1.name);
printf("나이 : %d\n", p1.age);
printf("주소 : %s\n", p1.address);
return 0;
}
이름 : 앵보
나이 : 28
주소 : 광주광역시 광산구 월계동
#include <stdio.h>
struct Monitor
{
char brand[20];
int size;
int resoution;
char color[20];
};
int main(){
struct Monitor m1 = {"LG", 27, 2560, "blue"};
{
printf("모니터 정보\n");
printf("브랜드 : %s\n", m1.brand);
printf("모니터 크기 : %d\n", m1.size);
printf("모니터 해상도 : %d * 1440p\n", m1.resoution);
printf("모니터 색상 : %s\n", m1.color);
};
printf("\n=============\n");
struct Monitor m2 = {"samsung", 32, 3840, "black"};
{
printf("모니터 정보\n");
printf("브랜드 : %s\n", m2.brand);
printf("모니터 크기 : %d\n", m2.size);
printf("모니터 해상도 : %d * 1440p\n", m2.resoution);
printf("모니터 색상 : %s\n", m2.color);
};
return 0;
}
모니터 정보
브랜드 : LG
모니터 크기 : 27
모니터 해상도 : 2560 * 1440p
모니터 색상 : blue
=============
모니터 정보
브랜드 : samsung
모니터 크기 : 32
모니터 해상도 : 3840 * 1440p
모니터 색상 : black
#include <stdio.h>
struct Person{
char name[20];
int age;
};
int main(){
struct Person p[3];
for (int i = 0; i < 3; i++)
{
printf("%d 번째 이름을 입력하세요 : ", i+1);
scanf("%s", p[i].name);
printf("%d 번째 나이를 입력하세요 : ", i+1);
scanf("%d", &p[i].age);
}
printf("\n 출력 부분입니다. \n\n");
for (int i = 0; i < 3; i++)
{
printf("Person %d : 이름 : %s 나이 : %d\n", i+1, p[i].name, p[i].age);
}
return 0;
}
1 번째 이름을 입력하세요 : 앵보
1 번째 나이를 입력하세요 : 28
2 번째 이름을 입력하세요 : 오랑우탄
2 번째 나이를 입력하세요 : 55
3 번째 이름을 입력하세요 : 침팬치
3 번째 나이를 입력하세요 : 60
출력 부분입니다.
Person 1 : 이름 : 앵보 나이 : 28
Person 2 : 이름 : 오랑우탄 나이 : 55
Person 3 : 이름 : 침팬치 나이 : 60
#include <stdio.h>
enum DayOfWeek{
Sunday = 0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
};
int main(){
enum DayOfWeek week;
week = Friday;
if (week == Friday)
{
printf("오늘은 불금입니다.");
}
else
{
printf("아쉽지만 금요일이 아니네요");
}
return 0;
}
오늘은 불금입니다.
#include <stdio.h>
enum numbers{
one = 1,
two,
three
};
int main(){
enum numbers mynumber;
printf("숫자를 입력하세요 (1=one, 2=two, 3=three) : ");
scanf("%d", &mynumber);
switch (mynumber)
{
case one:
printf("하나 입니다.\n");
break;
case two:
printf("둘 입니다.\n");
break;
case three:
printf("셋 입니다.\n");
break;
default:
printf("없는 값을 입력했습니다.\n");
break;
}
return 0;
}
숫자를 입력하세요 (1=one, 2=two, 3=three) : 2
둘 입니다.
구조체 멤버 정렬
C 언어는 CPU에서 메모리에 접근하는 효율을 높이기 위해 구조체를 일정한 크기로 정렬을 합니다. 이때 멤버 중에서 큰 자료형 크기의 배수로 정렬하며 남는 공간을 채우는 것을 패딩이라 부릅니다.
// 1 + 4 = 5 바이트 크기의 구조체
struct PacketHeader {
char flags; // 1바이트
int offset; // 4바이트
};
printf("%d\n", sizeof(struct PacketHeader)); // 8: 가장 큰 자료형은 int. int의 크기 4바이트로 정렬
// 남는 3바이트는 패딩
구조체의 정렬 크기를 조절하려면 컴파일러에서 제공하는 지시자를 사용해야 합니다.
Visual Studio, GCC 4.0 이상
#pragma pack(push, 정렬크기)
#pragma pack(pop)
GCC 4.0 미만
__attribute__((aligned(정렬크기),packed))
구조체의 내용을 0으로 설정하기
구조체의 내용을 모두 0으로 설정하려면 memset 함수를 사용합니다.
memset(구조체포인터, 0, sizeof(struct 구조체));
구조체의 내용을 복사하기
구조체의 내용을 복사하려면 memcpy 함수를 사용합니다.
memcpy(목적지포인터, 원본포인터, sizeof(struct 구조체));
구조체 배열
구조체 변수를 선언하려면 [ ] (대괄호)에 크기를 지정합니다. 구조체 배열의 멤버에 접근하려면 [ ]에 인덱스를 지정한 뒤 .으로 접근합니다.
// 구조체 배열 선언하기
struct 구조체이름 변수이름[크기];
// 구조체 배열을 선언하는 동시에 값을 초기화
struct 구조체이름 변수이름[크기] = { { .멤버이름1 = 값1, .멤버이름2 = 값2 },
{ .멤버이름1 = 값3, .멤버이름2 = 값4 } };
struct 구조체이름 변수이름[크기] = { { 값1, 값2 }, { 값3, 값4 } };
배열[인덱스].멤버; // 구조체 배열에서 요소의 멤버 값을 가져옴
배열[인덱스].멤버 = 값; // 구조체 배열에서 요소의 멤버에 값을 저장
구조체 포인터 배열
구조체 포인터 배열을 선언하려면 포인터 변수 이름 뒤에 [ ]를 붙인 뒤 크기를 지정합니다. 이때 배열의 요소에는 메모리를 할당해야 하며 멤버에 접근할 때는 [ ]에 인덱스를 지정한 뒤 ->로 접근합니다.
// 구조체 포인터 배열 선언하기
struct 구조체이름 *포인터이름[크기];
// 구조체 포인터 배열에 메모리 할당하기
for (int i = 0; i < 크기; i++) // 배열 크기만큼 반복
{
배열[i] = malloc(sizeof(struct 구조체)); // 각 요소에 구조체 크기만큼 메모리 할당
}
배열[인덱스]->멤버; // 구조체 포인터 배열에서 요소의 멤버 값을 가져옴
배열[인덱스]->멤버 = 값; // 구조체 포인터 배열에서 요소의 멤버에 값을 저장
// 구조체 포인터 배열의 메모리 해제하기
for (int i = 0; i < 크기; i++) // 배열 크기만큼 반복
{
free(포인터[i]); // 각 요소의 동적 메모리 해제
}
728x90
반응형
'c언어' 카테고리의 다른 글
c언어(구조체)_2024-05-21 (0) | 2024.05.22 |
---|---|
c언어(함수 포인터)_2024-05-20 (0) | 2024.05.20 |
c언어(포인터와 배열)_2024-05-16 (0) | 2024.05.16 |
c언어(switch 조건문)_2024-05-14 (0) | 2024.05.14 |
c언어(if 조건문)_2024-05-13 (0) | 2024.05.13 |