[[TableOfContents]] = 예정 = * 2시간 강의 * 함수 잠깐 복습 * 함수 선언, 선언 후 정의, main 함수, 재귀 함수 * 대망의 포인터 * C의 자료 저장 방식 * 포인터 : 주소값을 저장하는 변수 * ''{{{type}}}'' *''{{{identifier}}}'' ''{{{[, ...]}}}''; * *(unary), &(unary) * 주소 연산 * void 포인터 * 배열과 포인터의 관계 * [] 연산자 * 함수 인자값으로서의 포인터 * 값에 의한 호출,,call by value,, , 참조에 의한 호출,,call by reference,, * 포인터 배열/ 배열 포인터/이중 포인터/이차원 배열과 포인터 {{{===============================================================================}}} * 더 많은 포인터 * 동적 메모리 할당 * 스택 영역/힙 영역 * void* malloc(size_t size); * free(void* ptr); * 메모리 누수,,memory leak,, , 허상 포인터,,dangling pointer,, * NULL 포인터 * void* realloc(void *ptr, size_t size); * calloc 함수 * const * / * const(상수 포인터/ 포인터 상수) * 함수 포인터 * ''{{{type}}}'' (*''{{{identifier}}}'')({{{[}}}''{{{[type]}}}'' ''{{{[, ...]}}}''{{{]}}}); * typedef = 진행 = * &=주소값 * %x = 주소값 출력 * 등호연산자에서 왼쪽 : l-value, 오른쪽 : r-value. * 포인터의 특징 : 연산을 할 수 있다. * *x+1 을 하면 1칸 이동인데 1칸의 기준은 자료형이다.(int 는 4칸...) * 포인터와 일반 상수를 동시에 선언 할 수 있다. * 포인터도 타입이기 때문에 한줄에 한 포인터를 선언하는 것을 권장함. * 모든 자료형은 포인터를 가진다. *void 포인터 같은 경우는 어떤 자료형이든 다 가르킬 수 있다. 근데 뭘 가르키고 있는지 몰라서 그냥 출력하면 error 남. void *p_v; 에서 *p_v; 하면 error --> *(int*)p_v; 라고 해야됨. 괄호 안에껀 변환 시켜주고, 괄호 밖에 *은 주소 값 다시 찾아줌. ~~회장님 등장 포인터 쓰레기라는 말을 남기고 가심.~~ * scanf를 이용해서 다른데서 받아온 포인터 변경 가능. * 배열은 일종은 포인터지만 정확히 포인터는 아님. * int arr[5] = {1,2,3,4,5}가 있을때 *arr;은 1(첫번째 값), *(arr+1); 은 두번째 값 출력, arr[3] == *(arr+3); * 함수 인자값으로서의 포인터 * call by value * 값에 의한 호출. * call by reference * 참조에 의한 호출(c에는 없다.) 그래서 포인터 사용. * swap 함수를 만들어 두 값을 바꿀 때 사용. * 모든 타입에는 포인터 존재 ~~심지어 포인터라도~~ * 포인터에 배열이 존재 할 수 있고 배열이 포인터에 존재 할 수 있다.(포인터가 배열을 가르키거나 배열이 포인터를 가르키거나) * int *arr_p[5]; - 5개 짜리 포인터가 저장된 배열을 가르킴. * int (*p_arr)[4]; - 4개 짜리 배열을 가르키는 포인터.(4개만 저장 가능) * 2차원 배열에서 [][]에서 앞에는 비울 수 있는데 뒤에는 못 비우는 이유 : 주소값을 저장하는 부분 * const도 변수처럼 어떤 저장 공간에 저장 됨. * &x 는 가능하지만 x를 바꾸는 것은 안됨. * 포인터, 배열에도 상수 존재 할 수 있다. * 상수 포인터 상수를 가르키는 포인터 * 포인터 상수 상수인 포인터 *ex) int a = 5; int x = 10; int const *cp_x = &x; int *const pc_x = &x; print(cp_x); -- 얘는 10출력 *cp_x = 7; --이러면 에러 발생 print(pc_x); -- 얘는 10출력 *pc_x = 7; -- 얘는 ok(얘가 가르키는 위치는 제약 없으므로) pc_x = &x; __ 얘는 에러 = 실습 = = 기타 / 후기 / 방명록 = ----------------------------------- [새싹교실/2017/C언어가르쳐조] [새싹교실/2017]