Τα πάντα για την C

...του ubuntu και έργων ΕΛ/ΛΑΚ (Έργα-Οδηγοί-Προτάσεις)

Συντονιστής: konnn

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 22:34

Ε να σου βάλω ένα τεστάκι τότε...

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

void *(*f)( int *u, size_t l, void *(*g)(int *v) );

Τι εκφράζει το παραπάνω; :lol:
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 30 Ιαν 2012, 22:37

migf1 έγραψε:Ε να σου βάλω ένα τεστάκι τότε...

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

void *(*f)( int *u, size_t l, void *(*g)(int *v) );

Τι εκφράζει το παραπάνω; :lol:


χαχαχχαα δε μπορω να στο απαντησω αυτο διοτι ακομη δεν εχω παει
σε δεικτες σε συναρτησεις ! Αυριο παλι... ενα μυαλο το εχω μην το κάψουμε απο αποψε :lol: :lol:
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό stamatiou » 30 Ιαν 2012, 22:39

migf1 έγραψε:Ε να σου βάλω ένα τεστάκι τότε...

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

void *(*f)( int *u, size_t l, void *(*g)(int *v) );

Τι εκφράζει το παραπάνω; :lol:

Μήπως μια συνάρτηση που επιστρέφει void pointer με παράμετρο ένα pointer σε int, μια μεταβλητἠ size_t και μια άλλη συνάρτηση που επιστρέφει επ΄λισης ένα void pointer με παράμετρο ένα int pointer;
stamatiou
daemonTUX
daemonTUX
 
Δημοσιεύσεις: 947
Εγγραφή: 25 Ιουν 2010, 20:23
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 22:44

Oh yes!!!!!!!!!!!!!!!!!!
Άξιος !!!!!!!!!!!!!!!

Θα μπορούσε για παράδειγμα το u να είναι ένας πίνακας ακεραίων, το l να είναι το μήκος του πίνακα (πλήθος στοιχείων δηλαδή), και η g() μια συνάρτηση που να εφαρμόζει κάτι που θα της έχουμε πει μέσα της, στο κάθε στοιχείο του πίνακα ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 30 Ιαν 2012, 22:49

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 ;
}
//----------------------------------------------------------------------



Αυτο μπορεις να μου πεις πως καταφερε και ετρεξε τελικα? :lol: :lol: :lol:

νομιζω ο τριτος δεικτης δεν χρειαζεται απλα τον εβαλα στα γρηγορα επειδη μου πετουσε σφαλματα

χωρις να καλω την συναρτηση με τον p3 αλλα με τον p2 μου τρεχει... αλλο παλι και τουτο.
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 23:01

Βασικά αυτό αν δουλεύει, μάλλον κατά τύχη δουλεύει :lol:

Bαριέμαι να το κοιτάξω λεπτομερώς τώρα γιατί γράφω την τεκμηρίωση της βιβλιοθήκης, αλλά π.χ. τα p και p3 μέσα στις συναρτήσεις single_p() και double_p() τα χρησιμοποιείς αδήλωτα, κι απλώς τυχαίνει η C όταν δεν δηλώνεις τύπο στις μεταβλητές να τις θεωρεί int :P

Btw, θα σου πρότεινα να προτιμάς ασκήσεις που έχουν κάποια επαφή με πραγματικές εφαρμογές. Π.χ. φτιάξε μια συνάρτηση που θα κάνει swap 2 πίνακες ακεραίων ;)
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 30 Ιαν 2012, 23:19

migf1 έγραψε:Βασικά αυτό αν δουλεύει, μάλλον κατά τύχη δουλεύει :lol:

Bαριέμαι να το κοιτάξω λεπτομερώς τώρα γιατί γράφω την τεκμηρίωση της βιβλιοθήκης, αλλά π.χ. τα p και p3 μέσα στις συναρτήσεις single_p() και double_p() τα χρησιμοποιείς αδήλωτα, κι απλώς τυχαίνει η C όταν δεν δηλώνεις τύπο στις μεταβλητές να τις θεωρεί int :P

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;
}

//--------------------------------------------------------------------------------------------------------------------------------------------------
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 23:28

Αυτό δεν είναι swap 2 πινάκων από ακέραιους, αυτό προσπαθεί είναι swap 2 απλών ακεραίων αριθμών... αλλά δεν είναι κιόλας... κάνει και calloc() που δεν απελευθερώνει ποτέ (memory leak).
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό Star_Light » 30 Ιαν 2012, 23:42

migf1 έγραψε:Αυτό δεν είναι swap 2 πινάκων από ακέραιους, αυτό προσπαθεί είναι swap 2 απλών ακεραίων αριθμών... αλλά δεν είναι κιόλας... κάνει και calloc() που δεν απελευθερώνει ποτέ (memory leak).


Ναι δεν ειπα οτι το κανω με πινακες!!! Ασφαλως!

Κώδικας: Επιλογή όλων
free(tmp);


με αυτο ειναι ενταξει ?
Γνώσεις ⇛ Linux: Βασικές ┃ Προγραμματισμός: Δέν θέλω μεροκάματο , θέλω C και κακο θάνατο! ┃ Αγγλικά: Lower
Λειτουργικό ⇛ Ubuntu 10.10 σε Dual Boot με Windows 7
Προδιαγραφές ⇛ Επεξεργαστής : Intel(R) Core(TM) i3 CPU 540 @3.07Ghz (64bit)
RAM : Kingston 2GB
HDD : Coreshare 500GB
Κάρτα Γραφικών : Intel Corporation Core Processor Integrated Graphics Controller(rev 18) (prog-if 00 [VGA controller]) [8086:0042]
Star_Light
superbTUX
superbTUX
 
Δημοσιεύσεις: 2787
Εγγραφή: 01 Μάιος 2010, 21:07
Τοποθεσία: Αθήνα
IRC: Star_Light
Εκτύπωση

Re: Τα πάντα για την C/C++

Δημοσίευσηαπό migf1 » 30 Ιαν 2012, 23:56

Δεν υπάρχει απολύτως κανένας λόγος να κάνεις callοc() το temp (άρα ούτε και free() ) ..

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

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;
}
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

ΠροηγούμενηΕπόμενο

Επιστροφή στο Ανάπτυξη Λογισμικού / Αλγόριθμοι