포인터6 C언어 - 함수 포인터와 void 포인터 메모리 공간에 저장되는 것은 변수뿐만이 아니라, 프로그램 실행의 흐름을 구성하는 함수들도 바이너리(binary) 형태로 저장된다. 그리고 메모리 공간에 저장된 함수의 주소 값을 저장하는 포인터 변수를 "함수 포인터 변수"라고 한다. 함수 포인터 함수 포인터의 포인터 형(타입) 프로그래밍을 할 때 정의되는 모든 함수는 프로그램 실행 시 메인 메모리에 저장되어 실행된다. 배열의 이름이 배열의 시작 주소 값을 의미하듯이, 함수의 이름은 함수가 저장된 메모리 공간의 주소 값을 의미한다. 함수 포인터 변수를 선언할 때는 먼저 함수 포인터의 포인터 형을 결정해야 한다. 변수에서도 그랬듯이 형을 결정하지 못하면 적절한 함수 포인터 변수의 선언이 불가능하다. int SimpleFunc(int num) { . . . ... Programming/C 2021. 10. 5. C언어 - 다차원 배열과 포인터의 관계 1차원 배열이름의 포인터 형과 2차원 배열이름의 포인터 형 int arr[10]; 여기서 arr은 int형 포인터이다. 이를 함수의 인자로 전달하기 위해서는 다음과 같다. #include void SimpleFunc(int *ptr) { . . . . } int main() { . . . . SimpleFunc(arr); . . . . } 이제 2차원 배열을 봐보자. int arr2[2][3]; 1차원 배열에서 arr은 int형 포인터였으니 2차원 배열인 arr2는 int형 더블 포인터일까? 이 질문의 답은 "아니다"이다. int형 더블 포인터이기 위해서는 다음과 같아야 한다. int *ptr[2]; 2차원 배열 이름이 더블 포인터를 가리킨다고 오해하면 안 되는 것이다. 그럼 2차원 배열 이름의 포인터 .. Programming/C 2021. 10. 4. C언어 - 포인터의 포인터(다중 포인터) 배열도 다차원 배열이 있듯이 포인터에도 이중 포인터(더블 포인터), 다중 포인터가 존재한다. 포인터 변수를 가리키는 이중 포인터 변수 이중 포인터는 *연산자를 두 개 이어서 선언한다. int **p; 포인터 변수도 메모리 공간에 할당이 되는 변수이다. 이를 대상으로 &연산이 가능하고, 이때 반환되는 주소 값은 "더블 포인터 변수"에 저장이 가능하다. #include int main() { double num = 3.14; double *ptr = # double **dptr = &ptr; double *ptr2; printf("%9p %9p\n", ptr, *dptr); printf("%9g %9g\n", num, **dptr); ptr2 = *dptr; *ptr2 = 10.99; printf(".. Programming/C 2021. 10. 2. C언어 - 포인터와 함수에 대한 이해 배열을 함수의 인자로 전달하는 방식 배열을 함수의 인자로 전달하려 할 때 배열을 통째로 전달하는 것은 불가능하다. 이때 배열의 주소 값을 인자로 전달하고 이를 통해 접근하도록 유도하는 방법이 있다. 배열의 주소 값을 전달하는 방법은 다음과 같다. int arr[3] = {1, 2, 3}; SimpleFunc(arr); 이때 SimpleFunc 함수의 매개변수는 어떻게 선언될까? 우리는 이미 포인터를 공부하면서 이 방법에 대해 공부했다. void SimpleFunc(int *param) {. . .} int형 배열의 주소 값을 전달받을 것이기 때문에 int형 포인터인 매개변수를 선언해주면 된다. 포인터와 배열의 이름은 같은 것이므로 포인터 대신 배열 이름을 이용해 매개변수를 선언할 수도 있다. void S.. Programming/C 2021. 9. 30. C언어 - 포인터와 배열 이전 글에서 포인터에 대해 알아보았다. 이제 포인터와 배열의 관계에 대해 알아볼 것이다. 배열의 이름도 사실 포인터이다. 하지만 그 값을 바꿀 수 없는 "상수 형태의 포인터"이다. 포인터 변수와 배열의 이름을 비교해보면 다음과 같다. 표에서 보이듯 둘 다 이름이 존재하며, 특정 메모리 공간의 주소 값을 지닌다는 공통점이 있지만 포인터 변수는 이름이 의미하듯이 변수이고, 배열의 이름은 가리키는 대상의 변경이 불가능한 상수라는 차이가 있다. 배열은 상수 형태의 포인터이며 "포인터 상수"라고도 부른다. 또한 배열의 이름도 포인터이기 때문에 배열의 이름을 피연산자로 하는 *연산이 가능하다. 배열이름의 포인터 형과 배열이름을 대상으로 하는 *연산 int arr[5]; 이와 같이 배열이 선언돼 있자 하자. 배열의 .. Programming/C 2021. 9. 29. C언어 - 포인터의 이해 포인터 포인터는 주소를 가리킨다. 이름만 포인터이지 int, char와 같이 변수이다. 이를 포인터 변수라 부른다. 변수가 어떤 값을 저장하는 것처럼, 포인터는 변수의 주소 값을 저장한다. "정수 6이 저장된 int형 변수 num을 선언하고 이 변수의 주소 값 저장을 위한 포인터 변수 pnum을 선언한 후, pnum에 변수 num의 값을 저장하자."와 같은 문장이 요구하는 바를 코드로 작성해보자. #include int main() { int num = 6; int *pnum; pnum = # printf("int형 변수 num의 주소: %d\n", &num); printf("포인터 pnum의 값: %d\n", pnum); printf("포인터 punm이 가리키는 값: %d\n", *pnum); .. Programming/C 2021. 9. 27. 이전 1 다음 728x90