혼란스러워! 다음의 printf가 모두 함수 주소를 인쇄하는 올바른 방법입니까? 혼란에 대해서도 이야기하겠습니다. 매번 내가 출력에 내가 02D4 02D4 02D4 얻을, 이들의 printf의 (즉, 첫번째 printf와, 제 2의 printf와 3의 printf이다)을 모두 실행하지만 난 제거하거나 1 차 및 2 차의 printf의 코멘트, 내가 출력 로 folowing 얻을 내가 세 번째의 printf 문을 제거 할 때, 내가 출력 02D0 나는이 세 가지의 모든 주석을 제거하면 다시, 내가받을 다음 02BA 을 얻고있다 : 02D4 02D4 왜 하나 개의 문장이 다른 printf와 라인의 출력에 영향을 미치는 02D4 ? 사실 이것은 함수의 주소가 아닌가요? s와 &은 주소와 같은 값을 제공한다고 들었습니다 (배열과 마찬가지로). 하지만 여기서 나는 왜 s와 & s가 b를 인쇄하려고 할 때 영향을 받는지 혼란 스럽다. 여기서 b = s 또는 &이다.c의 기능 주소와 혼동
#include<stdio.h>
#include<conio.h>
int s(int);
void main()
{
int a=10,*b;
clrscr();
b=s(a++);
b=&s;
printf("%p\n",s); // 1st printf
printf("%p\n",&s); //2nd printf
printf("%p\n",b); //3rd printf
getch();
}
int s(int x)
{
return x;
}
변수 포인터에 함수 포인터를 넣으면 안됩니다 (동일한 크기가 아닌 것은 보장 할 수 있지만). C 언어의 특별한 경우는'& '가없는 함수 이름이 암시 적으로 (개인적으로 항상 명시 적으로 선호하는 것을 선호합니다) – Dave
을 얻는 것입니다 (단, 같은 방식으로 함수 포인터를 변수 포인터를 사용하는 경우'% p' 형식의 포인터를 사용하면 안됩니다. 함수 포인터를 인쇄하는 안전한 방법은이 답변을 참조하십시오 : http://stackoverflow.com/a/2741896/1180785) – Dave
주소 변경, 그것은 당신이 스크립트를 다시 컴파일하기 때문입니다! 코드를 전혀 변경하지 않아도 컴파일간에 매우 다를 수 있습니다. 덕분에 – Dave