함수의 매개변수로 함수 자체를 직접 넘길 수는 없습니다. 모두 함수 포인터로 전달되는 것입니다.
다만 모든 함수이름은 함수 포인터로 자동 변환되므로 함수 포인터를 써야 되는 곳에 func_name으로 적어주던 &func_name으로 적어주던 같습니다.
또한 함수 호출시에도 함수 포인터에 굳이 *를 적어주지 않아도 가리키는 함수를 호출하는 것이 가능힙니다.
void func(void) { ... }
void (*func_p)(void);
func_p = func; // 함수 이름은 함수 포인터로 변환된다. 따라서 &func로 써주지 않아도 상관없다.
func_p(); // 함수 포인터에 *을 붙이지 않아도 함수 호출이 가능하다.
함수 이름은 함수 포인터로 변환되고, 함수 포인터는 *을 만나 함수 이름으로 변환되고, 다시 *을 만나서 함수 포인터로 변환되고... 이걸 계속 반복합니다.
다만 void (****func_pointer)(void);의 경우에는 (제대로 메모리 할당이 되어 있고 제대로 함수를 가리키고 있다는 가정 하에) 함수를 호출하기 위해서 최소한 4번의 *를 쓰지 않으면 안됩니다. 함수의 포인터는 함수를 호출하기 위해서 사용할 수 있지만 함수의 포인터의 포인터는 함수를 호출할 수 없습니다.
또한 &&func_name 은 틀린 수식입니다. 주소값에 대한 &라는 것은 아무런 의미가 없지요.
C 혹은 C++에 대해서 묻고 계신 거라 가정하겠습니다.함수의 매
C 혹은 C++에 대해서 묻고 계신 거라 가정하겠습니다.
함수의 매개변수로 함수 자체를 직접 넘길 수는 없습니다. 모두 함수 포인터로 전달되는 것입니다.
다만 모든 함수이름은 함수 포인터로 자동 변환되므로 함수 포인터를 써야 되는 곳에 func_name으로 적어주던 &func_name으로 적어주던 같습니다.
또한 함수 호출시에도 함수 포인터에 굳이 *를 적어주지 않아도 가리키는 함수를 호출하는 것이 가능힙니다.
이러한 특징 때문에 다음과 같은 함수 호출식도 가능합니다.
함수 이름은 함수 포인터로 변환되고, 함수 포인터는 *을 만나 함수 이름으로 변환되고, 다시 *을 만나서 함수 포인터로 변환되고... 이걸 계속 반복합니다.
다만 void (****func_pointer)(void);의 경우에는 (제대로 메모리 할당이 되어 있고 제대로 함수를 가리키고 있다는 가정 하에) 함수를 호출하기 위해서 최소한 4번의 *를 쓰지 않으면 안됩니다. 함수의 포인터는 함수를 호출하기 위해서 사용할 수 있지만 함수의 포인터의 포인터는 함수를 호출할 수 없습니다.
또한 &&func_name 은 틀린 수식입니다. 주소값에 대한 &라는 것은 아무런 의미가 없지요.
[quote="Anonymous"]함수 이름은 함수 포인터로 변환되고
정정합니다.
함수 이름은 함수 포인터로 변환되고, 함수 포인터는 *을 만나 함수 이름으로 변환되고, 다시 함수 포인터로 변환되고, 다시 *을 만나... 이걸 *가 다 소진될때까지 계속 반복합니다.
제가 큰 실수를 했군요..
정말로 큰 실수를 했네요 ^__^;
사용 언어는 C언어 입니다.
글 잘 읽었습니다.
그런데 문제의 책에는 함수 포인터를 선언하지 않고 그냥 일반함수로 정의 해서 그럼니다.
그럼 함수 포인터를 선언 안하고 그냥 일반함수이름만 넘겨도 함수 포인터 역활을 하는 것인가요.
이제 시작이다.
함수 이름 자체가 그 함수의 위치를 나타내는 포인터 입니다.배열
함수 이름 자체가 그 함수의 위치를 나타내는 포인터 입니다.
배열 변수명이 첫번째 값의 주소를 나타내듯이요.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
[quote]함수 이름 자체가 그 함수의 위치를 나타내는 포인터 입니다.
그러면
double bisect(double f(double frarg) ) <--이게 아니라
double bisect(double (*f)(double frarg) ) <-- 이렇게 되야 되는거 아닌가요.
이 둘이 차이점이 있을거라 생각되는데요..
이제 시작이다.
[quote]C99 6.7.5.3 Function declarator
함수 선언(혹은 정의)의 매개변수 리스트에 있는 함수는 함수 포인터로 변환됩니다. 함수 선언의 매개변수 리스트에서 배열이 포인터형으로 변환되는 것과 비슷합니다.
[quote="miso210"]이 둘이 차이점이 있을거라 생각되는데요..
똑같은 의미를 가집니다. 뿐만아니라 선언에서는 f로 쓰고 정의에서는 (*f)로 (또는 그 반대로) 써도 됩니다. 내부적으로는 둘 다 (*f)로 받아들입니다.
[quote="Anonymous"]다만 void (****func_poi
4번 이상이 아니라 3번 이상입니다.
댓글 달기