Бърках си с указателите на функции и забелязах нещо със следната програма:
#include <stdio.h>
int operation (int x, int y, int (*fptr)(int, int))
{
int z;
z = (*fptr)(x, y);
return (z);
}
int add(int a, int b) {
return a+b;
}
int main(int argc, char** argv) {
/* This line */ printf("%d\n", operation(1, 2, add));
}
Изпълнението на тази програма води до 3, както трябва.
Въпреки това, на реда, отбелязан с /* This line */
, забелязах, че ако редът беше променен на някоя от тези други две опции, това също доведе до 3: printf("%d\n", operation(1, 2, *add)
и printf("%d\n", operation(1, 2, &add)
(забележете добавените звездичка и амперсанд).
Също така работи, когато опитах неща като printf("%d\n", operation(1, 2, *(&add)));
и printf("%d\n", operation(1, 2, &(*add)));
(което предположих, след като видях горното).
Чудех се защо е така и дали има разлика между двата варианта. Това недефинирано поведение ли е и просто имам късмет, компилаторът предполага ли, че под всички тези имам предвид едно и също нещо, или тук се случва нещо странно, което не разбирам?
x
и*x
са еднакви - person M.M   schedule 14.04.2015