반응형

C언어(2020년) 33

33. 형변환

#include int main() { int a1 = 10.1; printf("%d\n", a1); double a2 = 7; printf("%lf\n", a2); int b1 = 10; short b2 = 20; int b3 = b1 + b2; printf("%d\n", b3); return 0; } 10.1 은 double 인데, int a1 에 할당될 때, int 로 형변환 된다. 이것을 암묵적 형변환이라고 한다. 7 (int) 가 a2 로 들어갈때 double 로 형변환 되어지고(암묵적으로) b1(int) 과 b2(short) 가 더해질때 b2 가 int 로 형변환이 이루어진다.(역시 암묵적으로) #include int main() { float a = 10.0f; double b = 20.0;..

C언어(2020년) 2020.11.04

32. 함수 포인터

포인터가 데이터(변수)의 주소만 사용할 수 있는 것은 아니다. C언어에서 함수도 결국 컴파일되면 기계어로 변경되어지고, 실행되면 코드는 메모리영역에 위치하게 된다. 함수역시 메모리 주소를 가지게 된다는 뜻이다. void TestFunction(int a) { printf("%d\n", a); } 이와 같은 함수가 있다고 치자. 이 함수의 원형은 void (int) 이기 때문에 void (*) (int) 형태로 함수 포인터 자료형을 만들어야 한다. void (*pFunc)(int); // 포인터 pFunc 의 자료형은 void (*)(int) 이다. 이렇게 함수포인터 pFunc 를 선언하였으면, 이제 TestFunction 의 주소를 대입하여야 한다. pFunc = &TestFunction; 이렇게 하면 ..

C언어(2020년) 2020.11.04

30. 문자열

#include int main() { char str[4] = { 'a', 'b', 'c', 'd' }; printf("%s\n", str); return 0; } 이 코드를 실행시켜보면 abcd가 출력되고, 이상한 문자가 계속 해서 출력되는것을 알 수 있다. 이것은 문자열의 끝을 알리는 NULL 표식이 없기 때문이다. C언어에서 NULL 이란 0 을 의미하며, 아스키코드로서의 NULL 은 '\0' 라고 표현한다. char 형 변수에 숫자를 넣을 때에는 0,1,2,3... 이렇게 넣으면 되지만, ASCII 코드의 문자를 넣을 때에는 'a' 이런식으로 소괄호로 묶어 줘야 한다. ASCII 코드의 첫번째 값이 0 이며 이것은 NULL 을 의미하느데, ASCII 코드의 48번째 숫자문자 '0' 과 구별하기 ..

C언어(2020년) 2020.11.04

29. typedef

자료형의 별칭을 지정할 수 있다. // typedef (자료형) (별칭) typedef char c8; typedef unsigned char u8; typedef short d16; typedef unsigned short u16; typedef int d32; typedef unsigned int u32; typedef float f32; typedef double f64; 이제 우리는 int age = 19; 을 하는 대신 d32 age = 19; 를 할 수 있다. // typedef (자료형)* (별칭) typedef char* charptr; typedef short* shortptr; typedef int* intptr; 이와 같이 포인터를 재정의 할 수 도 있다. 이제 우리는 int* p1;..

C언어(2020년) 2020.11.04

28. union

#include union Distance { int inch; double meter; }; int main() { union Distance distance = { 20 }; printf("%d\n", distance.inch); printf("%lf\n", distance.meter); distance.inch = 20; distance.meter = 0.508; printf("%d\n", distance.inch); printf("%lf\n", distance.meter); return 0; } union 은 구조체와 비슷하지만, 다른점은 변수를 1개만 사용할 수 있다는 것이다. 위의 예제에서 union 은 int inch 와 double meter 두개를 가지고 있지만, 이중 가장큰 double..

C언어(2020년) 2020.11.04

27. 전처리기

#define _WINDOW_SYSTEM #ifdef _WINDOW_SYSTEM (코드) #endif 이런식으로 #ifdef 와 #endif 사이의 코드가 특정 #define 이 되어있는 경우에만 코드가 컴파일 되도록 설정 할 수 있다. #ifdef _WIN64 (코드) #elif _WIN32 (코드) #elif __APPLE__ #if TARGET_IPHONE_SIMULATOR // iOS Simulator #elif TARGET_OS_IPHONE // iOS device #elif TARGET_OS_MAC // Other kinds of Mac OS #else # error "Unknow Apple platform" #endif #elif __linux__ (코드) #elif __unix__ (코드)..

C언어(2020년) 2020.11.04

26. 가변인자 함수 만들기

printf( ) 함수의 경우 printf("Helle World\n"); 라고 쓰면 인자가 1개 이다. printf("%d\n", 10); 라고 쓰면 인자가 2개 이다. printf("%d, %d\n", 10, 20); 라고 쓰면 인자가 3개이다. 이런식으로 인자가 변하는 함수는 어떻게 구현 되어있을까? 또는 어떻게 구현할 수 있을까? 먼저.... #include // args는 고정 매개변수 void printfMy(int args, ...) { printf("%d ", args); } int main() { printfMy(1, 10); printfMy(2, 10, 20); printfMy(3, 10, 20, 30); printfMy(4, 10, 20, 30, 40); return 0; } 이와 같..

C언어(2020년) 2020.11.04

25. Call by Value, Call by reference, Call by Address

Call By Value 값에 의한 호출 Call By Reference 참조에 의한 호출 Call By Address 주소에 의한 호출 위 3가지 형식의 함수가 존재 한다. // Call By Value int add(int a, int b) { int c = a + b; return c; } int main() { int num1 = 10; int num2 = 20; int num3 = add(num1, num2); return 0; } 위 예제에서 num1 과 num2 는 변경되지 않고, num3 는 30이 대입된다. 만약에 #include // Call By Value int add(int a, int b) { a += 1; b += 1; int c = a + b; return c; } int m..

C언어(2020년) 2020.11.04

24. 함수

int add(int a, int b) { int c = a + b; return c; } 함수는 이와 같은 구조이다. 반환자료형(여기에서는 int) - 반환이 없는 경우도 있는데 반환이 없으면 void 라고 쓰면된다. 함수명(여기에서는 add) 인자들(여기에서는 int a, int b) - 인자가 없는경우도 있다. 함수의 시작을 알림(여기에서는 { ) 반환될 값(여기에서는 return c;) - 반환이 없는 함수는 return 도 없음. 함수의 끝을 알림(여기에서는 } ) 이 함수를 사용하려면, #include int add(int a, int b) { int c = a + b; return c; } int main() { int num = add(10, 15); printf("%d\n", num); ..

C언어(2020년) 2020.11.04
반응형