함수 포인터란, 함수의 이름도 배열의 이름처럼 '주소상수'에 부여한 식별자입니다. 따라서 함수의 이름도 포인터 변수에 저장할 수 있습니다. 다만, 변수의 자료형이 함수 호출에 필요한 정보(매개변수, 호출 규칙, 반환 자료형)들을 포함하고 있어야 변수를 이용해서 호출할 수 있습니다. 17.3.1 함수 포인터 함수 포인터의 기본 형식은 반환 자료형 ( 호출 규칙 *변수이름)(매개변수) #include //최댓값을 반환하는 함수 선언 및 정의 int GetMax(int a, int b, int c) { int nMax = a; if (b > nMax) nMax = b; if (c > nMax) nMax = c; return nMax; } int __cdecl main(void) { //int 매개변수 셋을 받..
함수 호출 규칙calling convention은 호출자 함수가 피호출자 함수를 호출하는 과정에서 매개변수를 전달하는 순서 및 매개변수가 사용한 메모리 관리방법 등에 관한 규칙입니다. 대표적으로 __cdecl, __stdcall, __fastcall 등 세 가지 정도가 있는데 이 세가지가 C언어의 표준에서 정의하는 것은 아닙니다. 세 가지 모두 약간씩 차이가 있는데 C/C++ 컴파일러의 기본 함수 호출 규칙은 __cdecl입니다. 호출 규칙 매개변수 스택 정리 매개변수 메모리 __cdecl Caller Stack __stdcall Callee Stack __fastcall Callee Stack + Register 17.2.1 __cdecl __cdecl 호출 규칙은 매개변수를 오른쪽부터 스택에 Push..
함수로써 수행할 코드는 얼마 안되는데 함수 호출로 인한 오버헤드overhead가 더 커질 수도 있습니다. 그래서 나온 것이 매크로와 __inline입니다. __inline은 넘어가도록 하겠습니다. 16.2.2 매크로 특수화 연산자 #, ## #과 ##이 있습니다. #은 인수가 무엇이든 모두 '문자열'로 만들어 줍니다. ##은 두 매개변수를 한 덩어리로 묶어 코드를 만들어주는 연산자입니다. #include //a를 "a"(문자열)로 변경하는 매크로 정의 #define STRING(a) #a //a와 b를 합쳐 하나로 붙여주는 매크로 정의 #define PASTER(a, b) a##b int main(void) { int nData = 10; //PASTER(nDa, ta)는 그냥 nData라고 쓴 것과 같..
형한정어(type qualifier)는 변수에 적용되는 문법으로서 와 매우 밀접하게 관련되어 있다. 15.1.1 const 형 한정어 const는 변수를 '상수화'하는 역할을 한다. 즉, 어떤 메모리를 '읽기 전용' 메모리로 만들어주는 기능을 제공한다. 변수가 선언 및 정의될 때부터 상수화를 해야하는 이유? -> 유지보수를 쉽게하기 위함. / 줄어든 변수의 수만큼 번역도 유리하며 성능향상을 꾀하기 위함. 특정 숫자와 변수의 이름을 조합하여 좀 더 의미가 명확해 보이는 상수 15.1.2 상수형 포인터 #include int main() { char szBuffer[32] = {"I am a boy."}; //가리키는 대상을 상수화한 포인터 변수 선언 및 정의 const char *pszBuffer = sz..
- Total
- Today
- Yesterday
- inflearn
- call by value
- call by reference
- Algorithm
- codeit
- 파이썬
- 직접 지정
- 종류
- 공부
- 시간복잡도
- 프로그래밍
- 구조체
- 1차원 배열
- 비트필드
- C
- 공간복잡도
- timecomplexity
- 공용체
- 강의
- 포인터
- 간접 지정
- 3차원 배열
- 재귀함수
- 회전리스트
- 알고리즘
- 다차원 배열
- 배열
- 자료구조
- 2차원 배열
- 형승격
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |