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

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

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

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

Δημοσίευσηαπό migf1 » 09 Φεβ 2012, 02:28

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

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

Δημοσίευσηαπό Star_Light » 09 Φεβ 2012, 02:31

migf1 έγραψε:Δεν καταλαβαίνω καν τι προσπαθείς να κάνεις εκεί πέρα, και για να είμαι ειλικρινής ούτε θέλω να καταλάβω (γιατί άρχισες πάλι τους αχρείαστα ακαταλαβίστικους κι κυρίως άχρηστους κώδικες :P )


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++

Δημοσίευσηαπό migf1 » 09 Φεβ 2012, 02:46

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

/* ------------------------------------- */
int *arrNew( int elements )
{
return calloc(elements, sizeof(int) );
}

int main( void )
{
int *arr = NULL;

arr = arrNew( 10 );
if ( !arr )
/* out of memory error */
...
free( arr );
}
Τελευταία επεξεργασία από migf1 και 09 Φεβ 2012, 02:58, έχει επεξεργασθεί 1 φορά/ες συνολικά
Go under the hood with C: Pointers, Strings, Linked Lists
Άβαταρ μέλους
migf1
powerTUX
powerTUX
 
Δημοσιεύσεις: 2082
Εγγραφή: 03 Ιουν 2011, 16:32
Εκτύπωση

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

Δημοσίευσηαπό migf1 » 09 Φεβ 2012, 02:53

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

/* ------------------------ */
char *strDup( const char *source )
{
char *ret = NULL;
if ( !source )
return NULL;

ret = calloc( strlen(source) + 1, sizeof(char) );
if ( !ret )
return NULL;

return strcpy( ret, source );
}
/* ------------------------ */
int main( void )
{
char *str = NULL;

str = strDup( "hello there!" );
if ( !str )
/* strDup() failed */
puts( str );
free( str );
}

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

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

Δημοσίευσηαπό Star_Light » 09 Φεβ 2012, 02:58

hmmm ok αλλα παρολο που χεις βαλει την puts μεσα δεν μου εμφανίζει κατι το πρόγραμμα :/
Γνώσεις ⇛ 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 » 09 Φεβ 2012, 02:58

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

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

Δημοσίευσηαπό migf1 » 09 Φεβ 2012, 03:04

Star_Light έγραψε:hmmm ok αλλα παρολο που χεις βαλει την puts μεσα δεν μου εμφανίζει κατι το πρόγραμμα :/

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

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

Δημοσίευσηαπό Star_Light » 09 Φεβ 2012, 03:10

ok έβαλα αυτο ->

Κώδικας: Επιλογή όλων
printf("%s" , str);

και ειναι οκ.

αλλα βεβαια δεν καταλαβαινω γιατι δεν εκτυπώνε και το

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


ισοδυναμα δεν ειναι αλλωστε
Γνώσεις ⇛ 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 » 09 Φεβ 2012, 03:13

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

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

Δημοσίευσηαπό Star_Light » 09 Φεβ 2012, 04:49

οκ εδω

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

if ( !str )
return 0;

puts( str );


Αν ο str υπάρχει τοτε δίνει 1 άρα !1 = 0 άρα δεν εκτελεί το return 0;

και εκτελεί απευθείας την puts πρόσεξε ομως.... αν βγάλω το return 0; ακριβως κατω απο την if και βαλω
printf("%s" , str); μου το εκτυπώνει κανονικα ;) γιατι? αλλα δεν εκτυπώνει μετα το puts!!!!!!!!!! Περιεργα πραγματα .

Επισης αν ο δείκτης δεν υπάρχει το αποτελεσμα ειναι 0 έτσι? Νομιζω ειχες πει παλαιοτερα αλλωστε πως το NULL ειναι μια
σταθερά ορισμένη στο 0.

Γενικα πολυ ωραιο παραδειγματάκι και μου ξαναθύμισε τις strlen() , strcpy() τα ξεσκονισα παλι αυτα
αλλα δεν καταλαβαινω εφοσον με προκαθορισμένο string καλείς την συνάρτηση ποιος ο λογος να βάζεις τοσους ελέγχους?
αφου δεν δίνει ο χρήστης κάποια είσοδο ωστε να υποθέσεις πως κάτι θα πάει στραβά εκτος και αν βάζεις τοσο έλεγχο μηπως
εσωτερικά στο συστημα πάει κατι στραβα? και αν ναι ποση πιθανοτητα δινεις σε αυτο? anyway .

Oυσιαστικά εκείνο που κάνεις ειναι να περνάς μια source συμβολοσειρά.... μετα να καταχωρείς χώρο οσο ειναι αυτή
σε έναν δείκτη προς συμβολοσειρά ret και τέλος επιστρέφεις το αποτέλεσμα της strcpy που είναι ένας δείκτης προς την νέα ret στην οποία
αντιγράφηκε ολη η source... αυτο αποθηκεύεται στον str σαν τιμή επιστροφής και τελικά εκτυπώνεται μεσω της puts.

ΠΟλυ ωραιο! Kαι έξυπνο να χρησιμοποιήσεις σαν τιμή επιστροφής μια συνάρτηση που επιστρέφει ουτως η άλλως δείκτη :clap:

lol ρε συ εγω δεν έχω τέτοια εμπειρία ακομη που μου λες οτι φτιάχνω αχρείαστα παραδείγματα!!!! ΠΟυ να μου κοβε να το κάνω αυτο
για αυτο παιδευόμουν παρολαυτα δεν ανησυχώ αν συνεχίσω να ασχολουμαι με C θα γινω δυναμίτης στο άμεσο μελλον........
ναι........ ε σε καμια 50αρια χρόνια δηλαδη αχαχαχαχαχαχαχα !
Γνώσεις ⇛ 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
Εκτύπωση

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

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