Δημοσιεύτηκε: 08 Φεβ 2012, 02:31
από Star_Light
Βασικα να ρωτήσω και εγω κάτι μεμονομένα?

Κώδικας: Επιλογή όλων

#include<stdio.h>
int func( int sum );

int main(void)
{
int sum=0 , r ;
int (*p)(int sum) = NULL ;

p = &func;

r= (*p)(sum);
printf("%d", r );

printf("%p %p" , p , &func );

return 0;
}
int func(int sum)
{
int a , b;

puts("Give a number: ");
scanf("%d" , &a);
puts("Give a number: ");
scanf("%d", &b);

sum= a+b ;

return sum;
}


δηλαδη το (*p)(sum) ειναι ο δείκτης της συνάρτησης που έχει την τιμή της διεύθυνσης μνήμης? δεν μπορω να καταλαβω 100% ας πουμε.
Δινω σε εναν δεικτη την διευθυνση μνημης μιας συνάρτησης απο εκει και επειτα το αποτελεσμα που θα επιστρέψει η συνάρτηση μπορω να
το εμφανίσω με την απο-αναφοροποίηση ?

btw το
Κώδικας: Επιλογή όλων

int (*p)(int sum) = NULL ;

p = &func;


μπορεί απευθείας να αντικατασταθεί απο το

Κώδικας: Επιλογή όλων
int (*p)(int sum) = &func ;


εκείνο που μπέρδευα το καλοκαίρι και σε ρωτούσα ηταν το initialization με το assignment στους δεικτες
δεν έχει σημασια το συμβολο μιας και ειναι 2 ξεχωριστα πραγματα... και τα χειριζεται διαφορετικα η γλωσσα.
Με την ιδια λογικη που το / μπορει να χρησιμοποιηθει σαν συμβολο για τα σχολια αλλα και για την διαιρεση.