1%! 10%.

자료구조 제1강: C언어에서 포인터, 배열, 그리고 포인터연산

By  | 2018년 3월 9일 | 
모든 변수는 주소를 가지고 주소는 byte단위로 매겨진다.포인터는 메모리 주소를 값으로 가지는 변수이다.type-name * variable-name; int * ptr : 1. ptr 은 변수명.2. * 는 ptr이 포인터 변수라는 표시.3. int 는 그 주소에 저장되는 데이터 타입이 정수라는 것을 알리기 위함. & : 변수로부터 그 변수의 주소를 추출하는 연산자이다. (주소 추출 연산자) int c = 12;int *p; // 포인터 변수.p = &c; // 주소를 값으로 가짐. *의 두가지 의미.1. 변수 선언시 변수명 앞에 나오면 포인터 변수임을 알리기 위한 것2. 포인터 변수 앞에 그냥 사용된 * 는 변수안에 저장된 주소가 가리키는 값을 표시하기 위한 것. int x = 1

독하게 시작하는 C 제17장 함수에 대한 고급 이론 - 첫 번째

By  | 2018년 2월 24일 | 
정수실수유도형 + 함수형식 -> 반환형식 ( 호출 규칙 ) 이름(주소) => 기계어 저장 R-X 읽기, 실행 가능하며 쓰기는 불가능 성능 향상 : 메모리와 CPU를 최대한 적게 사용하면 됨(불필요한 사용을 없앤다) 컴파일러가 최적화하는 것을 돕는 코드가 좋은 코드다. __inline 함수 :매크로의 단점 보완하기 위해서단점 : 괄호문제매개변수의 자료형 명시 불가능여러 구문을 묶거나 제어문을 포함한다든지 혹은 지역변수를 선언하는 일이 불가능하므로 논리구조를 만들어내는데 한계. 함수호출규칙(Calling Convention) 매개변수 스택정리 주체 매개변수 메모리__cdecl(c,c++) Caller Stack__stdcall(API) Callee Stack__fastc

독하게 시작하는 C 제17장 - 두 번째

By  | 2018년 2월 24일 | 
주소저장형식 : pointer -> 대상이 int 면 (int *)로. 함수의 이름은 주소.함수 포인터 형식 :반환 자료형 ( 호출규칙 * 변수이름)(매개변수) 역호출구조.#include <stdio.h>#include <stdlib.h> int Mycmp(const void *nParam1, const void *nParam2){ return *(int*)nParam1 - *(int*)nParam2;}int main(void) { int aList[5] = { 30, 10, 40, 50, 20}; int i = 0; //배열요소의 비교 방법을 규정한 Mycmp()함수의 주소를 //qsort() 함수의 인수로 전달하고 qsort() 함수 내부에서 역호출 한다. qsort(

독하게 시작하는 C 제17장 - 마지막 (종강)

By  | 2018년 2월 24일 | 
Hello.cHello.obj(compile. 기계어이지만 실행가능하지는 않다.)Hello.exe(link. 기계어이고 실행가능함.) main() -> TestFunc() <- World.cHello.obj Test.obj ~.obj Test.lib로 하면 둘다 붙일 수 있다. 함수가 call .lib를(라이브러리. 공구상자에 비유) ~.lib는 ~.obj 와 굉장히 유사하다. 라이브러리에 원형, 기능을 미리 정해두고(설계) 하나로 합치면 된다. -> 모듈화 프로그램. 1.LibTest.lib #include <stdio.h>void PrintData(int nParam){ printf("PrintData() : %d\n", nParam);} #include &l

이진 탐색(이분 탐색, 이분 검색)

By  | 2018년 2월 26일 | 
한번 비교를 할때마다 탐색 범위가 반으로 줄어든다.데이터 집합의 중앙 요소를 선택(정렬이 되어 있어야 함)중앙 요소가 찾으려는 값보다 작은지, 큰지를 고려해서 왼쪽 절반에서 중간 값을 구해야 할지, 오른쪽 절반에서 중간값을 구해야 할지 찾는다. 최대 log2n번 탐색하면 됨. 2는 밑 int BinarySearch(int *arr, int size, int finddata){ int left = 0; int right = size - 1; int mid; while(left <= right){ mid = (left + right) / 2; if(arr[mid] > finddata) right = mid - 1; else if(arr[mid] < finddata) left = mid +