- Κώδικας: Επιλογή όλων
void *(*f)( int *u, size_t l, void *(*g)(int *v) );
Τι εκφράζει το παραπάνω;
Συντονιστής: konnn
void *(*f)( int *u, size_t l, void *(*g)(int *v) );

migf1 έγραψε:Ε να σου βάλω ένα τεστάκι τότε...
- Κώδικας: Επιλογή όλων
void *(*f)( int *u, size_t l, void *(*g)(int *v) );
Τι εκφράζει το παραπάνω;

migf1 έγραψε:Ε να σου βάλω ένα τεστάκι τότε...
- Κώδικας: Επιλογή όλων
void *(*f)( int *u, size_t l, void *(*g)(int *v) );
Τι εκφράζει το παραπάνω;


migf1 έγραψε:Oh yes!!!!!!!!!!!!!!!!!!
Άξιος !!!!!!!!!!!!!!!
Θα μπορούσε για παράδειγμα το u να είναι ένας πίνακας ακεραίων, το l να είναι το μήκος του πίνακα (πλήθος στοιχείων δηλαδή), και η g() μια συνάρτηση που να εφαρμόζει κάτι που θα της έχουμε πει μέσα της, στο κάθε στοιχείο του πίνακα
//----------------------------------------------------------------------
#include<stdio.h>
void single_p(int *p2);
void double_p(int **p);
int main()
{
int **p , a=1 ;
int *p2;
p2=&a;
p=&p2;
printf ("%d\n", **p); // before change
printf("%p", p2);
puts("\n");
printf("%p", *p); // same adress with p2
printf("\n%p", &a);
puts("\n");
**p=1;
printf("After change in main : %d " , **p);
puts("\n");
single_p(p2); // call by reference simulation with one pointer
double_p(p); // call by reference simulation with double pointer
return 0;
}//---------------------------------------------------------------------
void single_p(int *p3)
{
*p3= 2;
printf("After change in single_p function : %d " , *p3);
return ;
}
//----------------------------------------------------------------------
void double_p(int **p)
{
**p=3;
printf("After change in double_p function : %d ", **p);
return ;
}
//----------------------------------------------------------------------


migf1 έγραψε:Βασικά αυτό αν δουλεύει, μάλλον κατά τύχη δουλεύει
Bαριέμαι να το κοιτάξω λεπτομερώς τώρα γιατί γράφω την τεκμηρίωση της βιβλιοθήκης, αλλά π.χ. τα p και p3 μέσα στις συναρτήσεις single_p() και double_p() τα χρησιμοποιείς αδήλωτα, κι απλώς τυχαίνει η C όταν δεν δηλώνεις τύπο στις μεταβλητές να τις θεωρεί int
Btw, θα σου πρότεινα να προτιμάς ασκήσεις που έχουν κάποια επαφή με πραγματικές εφαρμογές. Π.χ. φτιάξε μια συνάρτηση που θα κάνει swap 2 πίνακες ακεραίων
#include <stdio.h>
#include <stdlib.h>
void swap(int *x , int *y);
int main()
{
int x,y;
int *p_x , *p_y ; // pointer p_x and p_y declaration
p_x=&x;
p_y=&y;
printf("Dwste to x: \n");
scanf("%d",&x);
printf("Dwste to y: \n");
scanf("%d",&y);
swap(p_x, p_y); // function call by pass!
printf("The value of x is : %d \n",x);
printf("The value of y is : %d \n",y);
return 0;
}
//-----------------------------------------------
void swap(int *x, int *y)
{
int *tmp;
tmp=calloc(1,sizeof(int)); // one element
*tmp=*x;
*x=*y;
*y=*tmp;
return;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------


migf1 έγραψε:Αυτό δεν είναι swap 2 πινάκων από ακέραιους, αυτό προσπαθεί είναι swap 2 απλών ακεραίων αριθμών... αλλά δεν είναι κιόλας... κάνει και calloc() που δεν απελευθερώνει ποτέ (memory leak).
free(tmp); 
void int_swap( int *x, int *y )
{
int temp = 0;
/* sanity check */
if ( !x || !y )
return;
/* do the swap */
temp = *x;
*x = *y;
*y = temp;
return;
}
