차이

2011-10-21 3 views
0

가능한 중복 :차이

C와 C의 함수 포인터의 차이점은 무엇입니까 ++
How to print function pointers with cout?? 나는 함수 포인터를 C++로 출력 할 때 1을 주지만, C에서는 주소를주고있다.

#include <iostream> 

int fun() 
{} 

typedef int (*f)(); 


int main() 
{ 
    f test = fun; 
    std::cout << reinterpret_cast<f>(test); 
} 


#include <stdio.h> 

int fun() 
{} 

int (*f)(); 

int main() 
{ 
    f = fun; 
    printf("%p", f); 
} 
+0

당신이 당신의 C++ 코드에서 F 테스트 = 재미로 뜻 무슨 일이, 내가 늘도 – niko

+0

@niko 컴파일 생각 - 그것을 시도, 그것은 않습니다. –

+1

'reinterpret_cast (테스트);'Hug? – curiousguy

답변

4

함수 포인터는 void*으로 변환 될 수 없으므로, C++ I/O를 사용하는 프로그램에서는 bool으로 변환된다. C 프로그램은 C++ 프로그램이기도합니다. C++로 컴파일 할 때 아무런 차이가 없어야합니다. .

건배 & HTH,

4

가장 큰 차이점은 사용하는 인쇄 메커니즘입니다. std :: cout과 printf는 다른 의미를 갖는다. std :: cout은 부울 데이터로 포인터를 참조하고 주소 대신 0 또는 1을 인쇄합니다.

1

실제 질문은 "% p"가있는 printf와 함수 포인터를 스트리밍 할 때의 cout의 차이점입니다.

C++에서 함수 포인터를 인쇄하려면 char *로 캐스팅하고 바이트 (sizeof (test) 길이)를 반복합니다. 나는 당신이 "% p"와 비슷하다는 것을 발견 할 것이라고 생각한다.

+0

+1 영리 : 나는 표준 포인터에 맞지 않는 함수 포인터 (메서드)로 문제를 해결하는 방법을 생각하려고했습니다. –