함수에 대한 포인터 질문좀
글쓴이: kldpgk / 작성시간: 월, 2006/02/20 - 3:48오후
함수 포인터 사용하여 호출하는 소스인데
#include <stdio.h> double square (double x); //함수 원형 double (*p) (double x); // 포인터 선언 main() { p= square; //p가 square 가르키도록 초기화 한것.. printf ("%f %f\n", square(6.6), p(6.6)); //6.6이 의미 하는게 뭔지. return(0); } double square (double x) // 정의 , p=square에서 불러온거져? { return x*x; //여기서 x의 값이 먼지 모르겟네여 }
답은 똑같이 43.55999
간단한 소스 같은데 처음이라 봐도 봐도 모르겟네여
Forums:
이렇게 이해하심 되지않을가요?
저도 함수포인터에 대해서 잘 모르지만 몇자 적어보겠습니다.
포인터 변수는 많이 보셨을거에요. 포인터 변수는 동일한 타입의 여러번수를
이것도 주소값가져다가 사용하고 저변수주소값 가져다가 사용하고 하잔아요..
함수 포인터도 타입은 일치하고 이름이 다른 함수들을 이것도 붙여서 사용하고 저것도 붙여서 사용하고싶을때 쓴다고 하더라구요.
예를 들어서 a를 입력하면 +연산을 b를 입력하면 -연산을 할수있는 메뉴를 만들고 싶다면 +,-연산을 하는 동일한 타입의 함수를 두개만들고요 a가 입력되면 +연산을 하는 함수의 이름(주소)를 연결해주고요 -연산을하면 -연산을 하는 함수랑 연결해주는 식으로 써먹는다고 들었거든요.
오늘 하루두 즐거운 하루였으면 좋겠습니다.
6.6이 의미하는건 함수에 전달되는 인수값이죠..
6.6이 의미하는건 함수에 전달되는 인수값이죠..
Be cool...
1) 6.6 * 6.6 즉 6.6의 제곱을 구하는 것입니다.2) p=
1) 6.6 * 6.6 즉 6.6의 제곱을 구하는 것입니다.
2) p= square; 는 말그대로 square()의 주소값만 p에 저장해준것임(초기화)
호출(실행)은 p(정수) 형태로 불리어야 함
3) return x*x는 입력된 파라메터 즉, 더블 x를 곱해서 그 결과를 리턴함
* square는 전형적으로 제곱을 구하는 함수명으로 널리 사용됨(영문뜻 그대로,... 때로는 sqr()정도로 사용되기도 함. 그러나, 그거야 오야맘.
[quote="Anonymous"]1) 6.6 * 6.6 즉 6.6의 제
그럼여 6.6의 값이 7.7이면 답이 변하겟군여 ..??
(야릇하게.. 햇갈리네여 (역시 전 바보인가 봅니다))
함수 이름 자체는 해당 함수의 시작 주소를 가리키는 lvalue 아 아닌
함수 이름 자체는 해당 함수의 시작 주소를 가리키는 lvalue 아 아닌 변수 입니다.
---------
간디가 말한 우리를 파괴시키는 7가지 요소
첫째, 노동 없는 부(富)/둘째, 양심 없는 쾌락
셋째, 인격 없는 지! 식/넷째, 윤리 없는 비지니스
이익추구를 위해서라면..
다섯째, 인성(人性)없는 과학
여섯째, 희생 없는 종교/일곱째, 신념 없는 정치
다른 질문입니다만,합수 포인터는 디바이스 드라이버 작성할때 자주 쓴다
다른 질문입니다만,
합수 포인터는 디바이스 드라이버 작성할때 자주 쓴다고 얼핏 들었습니다.
그때말고 자주 쓰는 또다른 경우가 있나요?
문법상으로 알고 있어도
도통 써먹어 본적이 있어야죠.. (경험 부족이라서 그럴지도.. 0_0;; )
2006년 2월 21일.
[quote="어니스트"]다른 질문입니다만,합수 포인터는 디바이스 드
프로그래머 수준에서 다이내믹 라이브러리를 만들 필요가 있을 때 유용하게 쓸 수 있습니다. (런타임에 호출될 지점을 if문의 사용 없이 변경할 수 있는 유용한 기능이죠.) 최초의 C++ 구현은 컴파일러가 아니라 C 소스로 변환해주는 컨버터로 만들어졌는데, 그 구현 방식이 함수 포인터를 이용하는 것이었습니다.
도스 시절에는 그래픽 출력 루틴을 프로그래머가 짜는 경우가 허다했는데, 그때는 구현하다 보면 함수 포인터가 아주 유용한 경우가 많았거든요. 하지만 요즘의 VC/VC++ 환경에서는 모든 I/O를 거의 모두 시스템이 제공해주니 거의 함수 포인터를 쓸 일이 없는게 정상적일겁니다.
you must know the power of dark side.
[quote="jongwooh"]프로그래머 수준에서 다이내믹 라이브러리를
아.. 그렇군요.
감사합니다. :D
2006년 2월 21일.
보통 C 라이브러리 만들 때는 콜백을 등록하는 용도로 많이 쓰죠.
보통 C 라이브러리 만들 때는 콜백을 등록하는 용도로 많이 쓰죠.
예를 들어 PNG 같은 라이브러를 보면, 이미지 디코딩할 때 내부적으로 malloc을 써버리면, 다른 서브 시스템이랑 붙일 때 메모리 관리자가 달라서 문제가 될 수도 있기 때문에, 메모리 관리자의 함수 포인터를 받도록 하는거죠.
--
서광열 소프트웨어 블로그: http://skyul.tistory.com 입니다.
윈도우즈에서도 콜백을 많이 쓰죠. 콜백 함수 포인터를 API에 넘기는 경
윈도우즈에서도 콜백을 많이 쓰죠. 콜백 함수 포인터를 API에 넘기는 경우가 많습니다.
그리고 함수 기반으로 상태 기계를 구현할 때도 쓸 수 있을 것 같은데... 이건 클래스 기반 상태 기계가 더 나으니 별로 쓸모 없겠군요.
Heejoon Lee
플러그인
포토샵이나 애프터이펙트처럼 응용 프로그램에서 플러그인을 구현하거나 효과필터 등을 구현할 때, 동적인 메뉴를 지원해야 할 때 씁니다.
호스트 프로그램은 함수 포인터를 호출하도록 코딩하고, 플러그인 개발자가 필요한 기능을 작성하도록 하는 거죠.
===========================================================================
Shocky Han
BIM Consultant, Certified Information Systems Auditor
Seoul, Korea.
===========================================================================
1) Stevens의 UNP 초판을 보면 라이브러리를 쭉~ 구축한 후,
1) Stevens의 UNP 초판을 보면 라이브러리를 쭉~ 구축한 후, trivial ftp를 구현한 chapter가 있습니다.
어떤 유한상태머신(Finite State Machine)을 만들고 구현하다 보면, 함수 포인터가
참 유용하구나 하는 생각이 들기도 합니다.
2) 동적라이브러리를 이용할 경우라면, 자연스럽게 함수 포인터가 등장하기 마련입니다.
------------------ P.S. --------------
지식은 오픈해서 검증받아야 산지식이된다고 동네 아저씨가 그러더라.
은근히 많이 쓰이고 있어요 :)
앞서 말씀하신 DLL과 CALLBACK뿐만아니라
간단하게 주위만 살펴봐도 STL의 여러 알고리즘에서도 쓰이고
(for_each부터 시작해서 비교,정렬 알고리즘등등)
C라이브러리중에선 qsort()같은 애들이 크기비교를 위해 사용하죠 :)
라이브러리에서 변할수있는 일부기능을 사용하는측에 떠맡길(?)경우 유용하게 쓰이네요 :)
상태값 이나 넘어온 인자에 따라 함수 호출해야하는 경우 일일이 비교하여
상태값 이나 넘어온 인자에 따라 함수 호출해야하는 경우 일일이 비교하여 함수 호출하기 귀찮아서 다음 처럼 합니다.
콘솔구현이나 상태기계 구현등에 편하더군요.
-= 우주인류감시위원회 =-
Re: 은근히 많이 쓰이고 있어요 :)
이러한 유형을 system call과 대비하여 up-call 이라고 부릅니다. open system적인 측면을 강조할때도 널리 사용되겠습니다. 확장성등등에도 이용되겠습니다.
전형적인 유형중 하나가 active-x스타일 com,등이겠지요.
댓글 달기