study/C언어 17

포인터 배열과 배열 포인터에 대한 이해

포인터 배열이란? 포인터 들의 배열이다. 배열의 요소가 포인터들로 이루어져 있는 배열 선언 방법 char* arr [3]; 배열 요소의 자료형이 char* (포인터)인 배열 그 배열의 요소의 개수가 3개 arr [0], arr [1], arr [2]은 어떤 메모리를 가리키고 있다. char* arr [3]은 메모리 3곳을 가리키고 있는 배열입니다. 포인터 배열 예제 #include int main(void){ const char* arr[3]; //포인터 배열 선언. int i; arr[0] = "Block"; arr[1] = "someting"; arr[2] = "like"; for(i = 0; i %s\n", i, arr[i]); } return..

study/C언어 2020.06.29

define 매크로와 inline 함수

매크로(define)란? 여러 번 사용하게 될 상수를 문자로 표현하여 변경 시에도 편리하게 사용할 수 있도록 하는 것 매크로 상수는 컴파일 전에 전처리기에 의해서 숫자로 치환됩니다. #define [이름] [숫자] 매크로 사용 예시 #include #include #define MAX_LEN 20 int main(void) { int* arr = (int*)malloc(sizeof(int) * MAX_LEN); int i; for(i = 0; i < MAX_LEN; i++) { arr[i] = i+1; } for(i = 0; i < MAX_LEN; i++) { if(i % 5 == 0) printf("\n"); printf("%d ", arr[i]); } free(arr); return 0; } 매크로 ..

study/C언어 2020.06.29

동적 할당 정리(malloc, realloc, calloc, free 함수)

동적 할당이란? 프로그램 실행 중 필요한 메모리 공간을 할당 중요한 것은 동적으로 메모리를 할당할 대 Heap(힙) 영역에 할당을 하는 것입니다. 성공 : 할당한 메모리의 첫 번째 주소 리턴 실패 : NULL 리턴 헤더 파일 - 메모리 할당 함수 - malloc 메모리 할당 및 초기화 - calloc 메모리 추가 할당 - realloc 메모리 해제 함수 - free 2) 함수 원형 void *malloc(size_t size); 할당받을 메모리 크기를 인자로 받음 ex) int * arr = (int *) malloc(sizeof(int) * n ); * 인자의 개수가 n개의 배열을 동적 할당한다. void *calloc(size_t nelem, sizeo_t elsize); 첫 번째 인자 배열 요소 갯..

study/C언어 2020.06.29

WIN API [GetVolumeInformation() 함수]

BOOL GetVolumeInformationA( _In_opt_ LPCSTR lpRootPathName, _out_opt_ LPSTR lpVolumeNameBuffer, _In_ DWORD nVolumeNameSize, _out-opt_ LPDWORD lpVolumeSerialNumber, _out-opt_ LPDWORD lpMaximumComponentLength, _out-opt_ LPDWORD lpFileSystemFlags, _out-opt_ LPSTR lpFileSystemNameBuffer, _In_ DWORD nFileSystemNameSize ); GetVolumeInformation() 함수는 지정된 루트 디렉터리가 속한 파일 시스템 정의와 볼륨 정보를 가져오는 함수입니다. 변수 유형 ..

study/C언어 2020.04.08

구조체 정리

구조체란? 구조체(structure type)란 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 사용자 정의 타입입니다. 구조체는 기본 타입만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있습니다. 배열이 같은 타입의 변수 집합이라고 한다면, 구조체는 다양한 타입의 변수 집합을 하나의 타입으로 나타낸 것입니다. 이때 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(member variable)라고 합니다. 구조체의 정의와 선언 struct 구조체이름 { 멤버변수1의타입 멤버변수1의이름; 멤버변수2의타입 멤버변수2의이름; ... }; struct라는 키워드를 사용하여 구조체의 시작을 알리고, 구조체 이름인 book으로 구조체를 정의하고 있습니다. 중괄호 사이에 char..

study/C언어 2020.04.02

[c언어] 입출력 정리

printf("\'Hello \'"); //작은따옴표 표시 printf("\"Hello \""); //큰따옴표 표시 scanf("%1d %1d %1d %1d %1d",&a, &b, &c, &d, &e); //1개의 정수씩 변수에 저장한다. scanf("%u", &n) //unsigned int 입력받으려면 %u를 사용한다. scanf("lf", &n) //double(long float) 형식으로 입력 %.11lf를 사용하면 소수점 이하 11자리까지 출력된다. fgets()를 사용하면 공백 문자가 포함되어있는 문장을 입력받아 저장할 수 있다. 만약, 아래처럼 scanf("%s",...)를 이용해 문장을 입력받으면, 첫 번째 단어까지만 저장된다 char data[2001]; fgets(data, 2000,..

study/C언어 2020.04.02

인수 전달 방법

인수 전달 방법 함수를 호출할 때에는 함수에 필요한 데이터를 인수(argument)로 전달해 줄 수 있습니다. 이렇게 함수에 인수를 전달하는 방법에는 크게 다음과 같이 두가지 방법이 있습니다. 1. 값에 의한 전달(Call by value) 2. 참조에 의한 전달(Call by reference) 값에 의한 전달(Call by value) 값에 의한 전달 방법은 인수로 전달되는 변수가 가지고 있는 값을 함수 내의 매개 변수에 복사하는 방식입니다. 복사된 값으로 초기화 된 매개변수는 인수로 전달된 변수와는 완전히 별개의 변수가 되며, 따라서 함수 내에서 매개변수 조작은 인수로 전달되는 변수에 아무런 영향을 끼치지 않습니다. 실행 결과 변수 var의 초기값 : 10 local() 함수 호출 후 var의 값 ..

study/C언어 2020.03.31

배열(Array) 과 포인터(Pointer)

배열(Array) 이란? 배열은 같은 타입의 변수들로 이루어진 유한 집합으로 정의됩니다. 배열을 구성하는 값을 배열 요소(element)라고 하며, 배열 위치를 나타낸 숫자를 인덱스(index)라고 합니다. 1차원 배열 타입 배열 이름[상수]; 타입 배열 이름[ ] = {배열 요소 1, 배열 요소 2,....}; 2차원 배열 타입 배열 이름[행][열]; 포인터(Pointer) 주소 값의 이해 데이터의 주소 값이란 해당 데이터가 저장된 메모리의 시작 주소를 의미합니다. C언어에서는 이러한 주소 값을 1바이트 크기에 메모리 공간으로 나누어 표현합니다. 예를 들어, int 형 데이터는 4바이트의 크기를 가지지만, int형 데이터의 주소값을 시작 주소 1바이트만 가리킵니다. C언어에서 포인터(pointer) 란..

study/C언어 2020.03.31

함수(Function) 란?

함수란? 프로그래밍에서 함수란 하나의 특별한 목적의 작업을 수행하기 위한 코드의 집합 함수 사용 이유 1. 함수를 사용하는 가장 큰 이유는 바로 박복적인 프로그래밍을 피할 있다. 2. 프로그램에서 독립 작업을 여러 번 반복해야 할 때는 해당 작업을 수행하는 함수를 작성하면 된다. 3. 프로그램이 필요할 때마다 작성한 함수를 호출하면 해당 작업을 반복해서 수행 가능 함수의 원형 선언 int bigNum(int, int); //함수의 원형 선언 함수의 정의 1. 반환 타입(return type) : 함수가 모든 작업을 마치고 반환하는 데이터의 타입을 명시합니다. 2. 함수 이름 : 함수를 호출하기 위한 이름을 명시합니다. 3. 매개변수 목록(parameters) : 함수 호출 시에 전달되는 인수의 값을 저장..

study/C언어 2020.03.31

스택 프레임(Stack frame)

스택 프레임 개념 메모리의 스택(Stack) 영역은 함수의 호출과 관계되는 지역변수와 매개변수가 지정되는 영역 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다. * 함수가 호출되면 스택에는 함수에 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소, 함수에서 선언된 지역 변수 등이 저장된다. 이렇게 스택 영역에 차례대로 저장되는 함수를 호출 정보를 스택 프레임(Stack frame)이라고 합니다. 스택은 후입 선출 LIFO(Last-in First-out) 방식이라고도 합니다. 스택 프레임 동작 방식 예제) int main(void) { func1(); //func1() 호출 return 0; } void func1() { func2(); //func2() 호출 } void func..

study/C언어 2020.03.31