목록C언어/C언어 코딩 도장 (103)
문타쿠, 공부하다.

53.4 연습문제: 2차원 좌표 출력하기 #include struct Point2D { int x; int y; }; int main(void) { struct Point2D p[3]; p[0].x = 10; p[0].y = 20; p[1].x = 30; p[1].y = 40; p[2].x = 50; p[2].y = 60; for (int i = 0; i < sizeof(p) / sizeof(struct Point2D); i++) printf("%d %d\n", p[i].x, p[i].y); return 0; } 53.5 연습문제: 인적 정보를 초기화하기 #include #include #include struct Person { char name[20]; char address[100]; int age..

INTRO 구조체 변수를 겁나 많이 선언해야한다면..? struct Point2D { int x; int y; }; struct Point2D p1; struct Point2D p2; . . . struct Point2D p100; 이럴 때 사용하는 것이 바로 구조체 배열 선언! struct Point2D p[100]; 53.1 구조체 배열 선언하기 #include struct Point2D { int x; int y; }; int main(void) { struct Point2D p[3]; p[0].x = 10; p[0].y = 20; p[1].x = 30; p[1].y = 40; p[2].x = 50; p[2].y = 60; printf("p[0]: %d %d\n", p[0].x, p[0].y); p..

52.4 연습문제: 2차원 좌표 초기화하기 #include #include #include struct Point2D { int x; int y; }; int main(void) { struct Point2D p; struct Point2D* ptr = malloc(sizeof(struct Point2D)); memset(&p, 0, sizeof(struct Point2D)); memset(ptr, 0, sizeof(struct Point2D)); printf("%d %d %d %d\n", p.x, p.y, ptr->x, ptr->y); return 0; } 52.5 연습문제: 2차원 좌표 복제하기 #include #include #include struct Point2D { int x; int y; }..

INTRO 구조체에 변수를 선언하거나 메모리를 할당하며 결국 메모리 공간을 차지하게 되는 것이므로 메모리 관련 함수도 사용할 수 있게 된다. 이번에는 메모리 함수를 사용하여 구조체와 메모리에 값을 설정하는 방법과, 구조체와 메모리의 내용을 복사하는 방법을 알아보자. 52.1 구조체와 메모리 활용하기 구조체의 멤버를 모두 0으로 만들기 위한 방법1. 멤버별로 접근하여 0을 저장한다. 구조체변수.멤버1 = 0; 구조체변수.멤버2 = 0; 구조체변수.멤버3 = 0; 구조체변수.멤버4 = 0; 구조체변수.멤버5 = 0; 멤버의 수가 많아질수록 매우 번거로운 작업이 된다. 방법2. { 0, } 중괄호를 사용하여 0으로 초기화한다. #include struct Point2D { int x; int y; }; int..

51.4 연습문제: 압축 헤더 크기 구하기 #include struct CompressHeader { char flags; int version; }; int main(void) { struct CompressHeader header; printf("%zd\n", sizeof(header)); return 0; } 51.5 연습문제: 패킷 크기 조절하기 #include #pragma pack(push, 1) struct Packet { short length; int seq; }; #pragma pack(pop) int main(void) { struct Packet pkt; printf("%zd\n", sizeof(pkt)); return 0; } 51.6 심사문제: 암호화 헤더 크기 구하기 #incl..

INTRO 컴퓨터의 CPU가 메모리에 접근할 때 32비트 CPU는 4바이트 단위, 64비트 CPU는 8바이트 단위로 접근한다. 만약 32비트 CPU에서 4바이트보다 작은 데이터에 접근하게 될 경우 내부적으로 시프트 연산이 발생해서 효율이 떨어지게 되는데... 그래서 C언어 컴파일러는 구조체가 메모리에 올라갔을 때, CPU가 메모리의 데이터에 효율적으로 접근할 수 있도록 구조체를 일정한 크기로 정렬한다. => 구조체 멤버 정렬 51.1 구조체 크기 알아보기 #include struct PacketHeader { char flags; int seq; }; int main(void) { struct PacketHeader header; printf("구조체 크기: %zd\n", sizeof(header)); ..

50.2 연습문제: 사각형의 넓이 구하기 #include #include #include struct Rectangle { int x1, y1; int x2, y2; }; int main(void) { struct Rectangle rect; int area; rect.x1 = 20; rect.y1 = 20; rect.x2 = 40; rect.y2 = 30; int width = abs(rect.x2 - rect.x1); int height = abs(rect.y2 - rect.y1); area = width * height; printf("%d\n", area); return 0; } 50.3 심사문제: 두 점 사이의 거리 구하기 #define _CRT_SECURE_NO_WARNINGS #include..

50.1 두 점 사이의 거리 구하기 #include #include struct Point2D { int x; int y; }; int main(void) { struct Point2D p1; // 점 1 struct Point2D p2; // 점 2 // 점 1의 위치 p1.x = 30; p1.y = 20; // 점 2의 위치 p2.x = 60; p2.y = 50; // 선 a와 b의 길이 int a = p2.x - p1.x; int b = p2.y - p1.y; // c의 값을 구하는 방법 1 float c1 = sqrt((a * a) + (b * b)); // c의 값을 구하는 방법 1 float c2 = sqrt(pow(a, 2) + pow(b, 2)); printf("%f\n", c1); pri..

49.5 연습문제: 학생 구조체 포인터에 메모리 할당하기 #define _CRT_SECURE_NO_WARNINGS #include #include #include struct Student { char name[20]; int grade; int class; float average; }; int main(void) { struct Student* s1 = malloc(sizeof(struct Student)); strcpy(s1->name, "고길동"); s1->grade = 1; s1->class = 3; s1->average = 65.389999f; printf("이름: %s\n", s1->name); printf("학년: %d\n", s1->grade); printf("반: %d\n", s1->c..

49.1 구조체 포인터를 선언하고 메모리 할당하기 #define _CRT_SECURE_NO_WARNINGS #include #include #include struct Person { char name[20]; int age; char address[100]; }; int main(void) { // 구조체 포인터 선언 및 메모리 할당 struct Person* p1 = malloc(sizeof(struct Person)); // 화살표 연산자로 구조체 멤버에 접근하여 값 할당 strcpy(p1->name, "홍길동"); p1->age = 30; strcpy(p1->address, "서울시 용산구 한남동"); // 화살표 연산자로 구조체 멤버에 접근하여 값 출력 printf("이름: %s\n", p1->..