본문 바로가기

c19

19_동적할당2(Dynamic Allocation) - calloc 동적 할당의 개념은 malloc함수를 통해 공부했다. 이번엔 calloc함수에 대해 알아보자. 우선 calloc함수의 선언 방법은 이러하다. calloc(siez_t Count, size_t Size); size_t 자료형의 정의로 이동해 보면 #ifdef _WIN64(전처리기) 안에 typedef unsigned __int64이라고 나와있다. #ifdef _WIN64이 키워드를 보면 운영체제 윈도 64비트일 때 실행된다. 이 자료형은 부호가 없는 64비트 정수의 형태이다. 매개변수 size_t Count는 메모리를 할당할 요소의 수이고, size _t Size는 각 요소들의 크기(바이트)이다. 이제 10개의 정수 배열에 메모리를 calloc키워드를 사용하여 할당해 보자. int *p; p = (int*.. 2023. 4. 30.
18_동적할당1(Dynamic Allocation) - malloc C언어에서 동적 할당의 개념이란? 메모리를 좀 더 효율적으로 쓰기 위해 사용하는 개념이다. 어떻게 효율적으로 쓸까? 프로그래머는 동적 할당을 통해 프로그램이 실행되는 런타임 상태일 때 동적으로 메모리에 할당할 수 있게 된다. 필요한 메모리의 크기가 컴파일 시간이 아니라 런타임에 결정될 수 있다. 이러한 특성은 메모리 크기를 미리 결정할 수 없거나 사용자 입력 또는 기타 프로그램 조건에 따라 달라질 때 유연한 프로그래밍을 할 수 있게 된다. 먼저 메모리 영역에 대해 알아보고, 어떤 영역이 동적 할당이 이루어지는지 알아보자. Code Area 함수와 상수, 실행한 프로그램의 소스코드가 저장되는 공간이며, 함수나 상수는 컴파일 단계에서 검사를 마치고 저장되므로 이곳은 정적 메모리이다. Data Area 전역 .. 2023. 4. 26.
17_정적변수(static) static은 정적이라는 뜻을 가지고 있고, C언어에서 선언문이 한 번만 실행되며 프로그램이 종료될 때까지 데이터를 저장하는 기능을 가지고 있다. 프로그램 내에서 변수 또는 함수의 수명, 가시성 및 범위를 제어할 때 주로 사용한다. 코드에서 사용되는 위치에 따라(지역, 전역) 다른 의미를 가지며 변수와 함수 모두에 적용될 수 있다. 그렇다면 정적 지역, 전역 변수와 정적 함수를 예제로 static에 대해 알아보자. void PrintNum() { static int Num = 0; // 정적 지역 변수 ++Num; printf("정적 변수 Num : %d\n", Num); } int main() { PrintNum(); PrintNum(); PrintNum(); PrintNum(); return 0; }.. 2023. 4. 23.
16_지역, 전역변수(Local, Global Variable) Local은 지역이라는 뜻을 가지고 있고, Global은 전반적인, 세계적인 이라는 뜻이 있다. 롤이라는 게임에선 Global 궁극기(모든 지역에 영향을 주는 스킬)를 생각하면 될 것 같다. 그래서 지역변수와 전역변수의 차이점과 특성에 대해 알아보자. Local Variable(지역 변수) void PrintNum(int num) { printf("num Value : %d\n", num); printf("num Address : %p\n", &num); } int main() { int num = 0; // 메인 함수의 지역 변수 num int A = 10; // 메인 함수의 지역 변수 A if(num == 0) { A = 20; int B = 30; // if문 안의 지역 변수 B int num = .. 2023. 4. 20.
15_포인터(Pointer) Pointer는 가리키다라는 뜻이 있다. C에서 다른 변수, 혹은 그변수의 메모리 공간 주소를 저장하는 변수로 사용된다. 메모리는 컴퓨터의 물리적인 공간으로, 변수는 이 메모리 공간에 값을 저장하고 접근하는데 사용된다. 포인터가 가리키는 값을 가져오는 것을 역참조라고 한다. 포인터 p라는 변수에 a라는 포인터 변수 p = (*p) *p의 주소 : 3000 *p = &a[0] = 1000 주소 : 3004 주소 : 3008 주소 : 3012 먼저 int a[4]의 변수가 있고, p라는 포인터 변수에 a의 첫번째 인덱스 값을 넣는다. int *p = &a[0]; (포인터 변수 p는 a[0]의 주소 1000을 가리키고 있다.) -> 포인터 변수의 주소와 int a[4]의 주소는 임의로 설정한 주소이다. int.. 2023. 4. 17.
14_함수(Function) Function은 기능, 함수라는 뜻이다. 중복된 명령 코드를 손 쉽게 사용할 수 있도록 저장하는 기능을 함수라고 한다. 그래서 함수를 쓸 수록 가독성과 효율성이 증가된다. 함수를 정의하는 방법은 이러하다. 반환값 함수명(매개변수 리스트) { 함수의 정의; } 함수를 호출하는 방법은 이러하다. 함수명(매개변수 리스트) C언어에서 함수의 종류는 생각보다 많지않다. 반환값이 있고 매개변수가 없는 함수와 반환값이 없고 매개변수가 있는 함수와 반환값이 있고 매개변수가 있는 함수가 있다. 예시를 만들면서 다시 생각해보자. int ReturnThree() // 반환형이 있고 매개변수가 없는 함수 { printf("3을 넘깁니다.\n"); int three = 3; return three; } void Add(int.. 2023. 4. 14.