목록전체 글 (130)
문타쿠, 공부하다.

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..

#include printf( ) 표준 출력 함수 sprintf( ) 서식을 지정하여 문자열을 만드는 / 문자열로 변환하는 함수 (출력 대신 문자열을 버퍼에 저장) scanf( ) 표준 입력 함수 scanf_s( ) scanf()의 단점을 보완한 입력 함수 getchar( ) 문자 입력 함수 putchar( ) 문자 출력 함수 gets( ) 문자열 입력 함수 gets_s( ) gets()의 단점을 보완한 문자열 입력 함수 fgets( ) 파일 입력 함수 puts( ) \n을 포함한 문자열 출력 함수 #include srand(time(NULL)); ㄴrand 함수를 사용하기 전, 위의 코드를 작성해야 프로그램을 실행할 때마다 난수 값이 다르게 나온다. ㄴtime 함수는 #include 에 선언되어 있다...

함수 포인터 함수의 이름(=주소 상수)을 저장할 수 있는 포인터 함수호출 연산자의 피연산자가 될 수 있음 반환자료형(호출규칙 *변수명)(매개변수) 형식으로 선언 호출규칙은 생략 가능 32비트 호출규칙: __cdecl(C언어 기본), __stdcall, __fastcall 64비트 호출규칙: __fastcall #include double Average(int num1, int num2, int num3) { double avg = (num1 + num2 + num3) / 3.0; return avg; } int main(void) { double(*myAverage)(int, int, int) = Average; printf("나의 평균 점수는 %.2f점입니다.\n", Average(88, 99, 100..

#include 컴파일 전에 선행처리를 위한 문법 헤더 포함 조건부 컴파일 심복릭 상수 정의 매크로 정의 '#' 기호로 시작 헤더 파일(선언 코드가 들어 있는 파일)을 소스코드에 합쳐주는 기능 -> .c파일과 .h파일을 합침 로 포함 시 컴파일러가 정의하고 있는 시스템 헤더 파일들 중 검색 " "로 포함 시 현재 경로에서 파일 검색 #pragma once -> '헤더가 중복 인클루드 했을 때 한 번만 인클루드 해라'라는 의미 #define과 매크로 정의 #define 형 한정에 const처럼 심볼릭 상수를 정의할 수 있는 전처리기 정의한 상수는 컴파일 전에 적용되어 소스코드를 치환 매크로 #define 전처리기로 정의 함수처럼 보이지만 함수가 아님 함수 호출에 의한 오버헤드가 없음 컴파일러 최적화에 따라..

형 한정어와 컴파일러 최적화 소개 형 한정어 (Type qualifier) 변수에 적용하는 문법으로 컴파일러 최적화에 깊이 관련 컴파일러를 사용하는 언어의 가장 큰 장점 중 하나가 바로 최적화 const 변수를 상수화하는 문법 = 변수에 저장된 초깃값을 변경할 수 없도록 함 개념상 읽기 전용으로 만들어 주는 것 변수의 개수가 줄어들기 때문에 성능 최적화(Release mode)에 유리 volatile const와 반대로 변수를 최적화에서 제외하는 것 즉, 컴파일러가 최적화라는 것을 할 때 해당 변수는 무조건 존재해야 하므로 최적화에서 제외시키라는 뜻 주로 임베디드 시스템 개발에서 사용 extern typedef 심볼릭 상수 읽기 좋은 코드를 만드는 방법으로, 프로그램 내부에서 특별한 의미를 갖는 기준 값..

파일 시스템 기본 이론 - 첫 번째 컴퓨터 = CPU + RAM + 보조기억장치(HDD/SSD) CPU 연산자를 통해 관리/사용한다. RAM = 1차 메모리 변수를 통해 관리/사용한다. 휘발성이고 용량이 작다는 특징이 있다. HDD나 SSD와 같은 보조기억장치 = 2차 메모리 데이터량이 굉장히 많아 파일 시스템으로 관리한다. 비휘발성이고 용량이 크다는 특징이 있다. 파일 시스템 '파일'이란 기본적으로 하나의 단위라고 할 수 있다. 윈도우 파일 시스템(NTFS)에서는 논리 드라이브 단위 및 경로 사용 파일 시스템은 덩치가 굉장히 크고 용량도 커서 분할 작업을 함 논리적 분할: 물리적으로 한 개인 디스크를 논리적으로 여러 개가 되도록 분할하는 것(=파티셔닝) 절대 경로 = 전체 경로 = Full Path =..

구조체 선언 및 정의 여러 자료형을 모아 새로운 하나의 형식으로 기술/선언 배열은 같은 것이 모인 것이며 구조체는 서로 다른 것들이 모인 것으로 이해할 수 있음(인덱스는 없음) 구조체는 하나의 새로운 사용자 정의 형식으로 작동 구조체를 이루는 요소를 멤버라고 부름 구조체 변수를 통해 개별 요소에 접근할 때는 멤버 접근 연산자(.)를 사용 구조체 변수(혹은 인스턴스) 선언 시 초깃값을 기술할 때는 반드시 멤버 선언 순서에 맞춰야 함 typedef 선언을 동반하는 것이 일반적 #include #include struct USERDATA { int age; char name[32]; char phone[32]; }; int main(void) { struct USERDATA user = { 0, "", "" ..