스탠포드의 Programming Abstractions 과정을 듣는 동안 다음과 같은 코드가 나타납니다.매개 변수와 함수 대 함수 매개 변수로 함수 포인터
void plot(double start, double end, double (fn)(double)) {
double i;
for (i = start; i <= end; i += 1)
printf("fn(%f) = %f\n", i, fn(i));
}
double plus1(double x) {
return x + 1;
}
int main(void) {
plot(1, 10, plus1);
return 0;
}
GCC를 사용하여 시스템에서 코드를 컴파일 한 다음 G ++; 그들은 둘 다 완벽하게 달린다.
나는 기능 만 func2
에게 i
의 주소를 줄 것이다 void func2(int *a)
에 &i
을 통과하면서 함수와 같은 void func1(int a)
내로 int i = 2
를 통과하면 해당 기능에 그 i
의 새 복사본을 만들 것이라는 점을 알고있다.
fn
을 plot
으로 전달하는 메커니즘은 무엇인지 설명하고 매개 변수로 함수 포인터를 전달하는 것과 다른 점은 무엇입니까?
당신은 배열에 관한 두 번째 주장에 대한 참조를 가지고 있습니까? 특히 C++ 일 때? – krlmlr
이전에는'fn'은 함수에 대한 포인터이고, 후자의'fn' 함수는 명시 적으로 함수 –
@ user946850에 대한 포인터로 선언되었습니다 :'... 8.3.5/5' : ...와 약간의 차이가 있습니다. 각 매개 변수의 유형을 결정할 때 "T 배열"또는 "T를 반환하는 함수"유형의 매개 변수는 각각 "T에 대한 포인터"또는 "T를 반환하는 함수에 대한 포인터"로 조정됩니다. ... – Mankarse