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

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

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

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

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

Ναι. Αυτό που μάλλον σε μπέρδεψε είναι πως στα εγχειρίδια και στα βιβλία τα c-strings συμβολίζονται ως: char * ή char[] γιατί στην πραγματικότητα είναι όντως δείκτες στον 1ο στοιχείο ενός πίνακα χαρακτήρων, με την έξτρα προϋπόθεση πως στο τέλος τους πρέπει να έχουν τον μηδενικό χαρακτήρα (ή πριν το τέλος τους, αλλά να έχουν τουλάχιστον έναν μηδενικό χαρακτήρα κάπου μέσα τους). Σε αυτόν τον μηδενικό χαρακτήρα βασίζονται οι περισσότερες συναρτήσεις διαχείρισης των c-strings.

Και η ονομασία c-string αυτό ακριβώς σημαίνει: πίνακας χαρακτήρων που περιέχει τουλάχιστον έναν μηδενικό χαρακτήρα μέσα του (ο οποίος σηματοδοτεί το τρέχον μήκος του c-string).

Αν δεν περιέχει μηδενικό χαρακτήρα, τότε δεν είναι c-string, αλλά σκέτο string... απλώς οι 2 όροι πολλές συχνά χρησιμοποιούνται ως ισοδύναμοι στην C. Αν λοιπόν για παράδειγμα περάσεις στην puts ως όρισμα έναν πίνακα από χαρακτήρες χωρίς να έχεις εξασφαλίσει πως περιέχει κάπου μέσα του έναν μηδενικό χαρακτήρα, η puts() θα τυπώνει συνέχεια χαρακτήρες (ξεκινώντας από την αρχή του πίνακα που της πέρασες)... κάποια στιγμή θα βρει κάποιον μηεδινκό χαρακτήρα, αλλά κατά 99.999% θα έχει ξεπεράσει το μέγιστο μήκος που είχες ορίσει για τον πίνακα που της πέρασες... θα φτάσει δηλαδή με άλλα λόγια στον.. .γάμο του καραγκιόζη :lol:

Πάντως οι συμβολισμοί που χρησιμοποιεί η printf() και η scanf() είναι πολύ πιο βατοί να τους θυμάται κανείς... το %c είναι για έναν χαρακτήρα (από το char) ενώ το %s είναι για ολόκληρο string (από το string).
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, 21:15

Ουσιαστικα εσυ δεν κανεις τιποτε αλλο απο το να καλεις ας πουμε την puts με ορισμα εναν "πινακα απο χαρακτηρες" οπως εκανα πανω κατω και στον bubble sort που καλεσα την συναρτηση με το ονομα του πινακα. (Φυσικα μεταξυ τους δεν εχουν σχεση απλα τα "συσχετιζω καταχρηστικα για να μπορεσω να καταλαβω αυτο το σκετο πραγμα σαν ορισμα που περνιεται τι ακριβως ειναι :D) ΟΥΣΙΑΣΤΙκα του περνας εσυ εναν δεικτη που δειχνει στο 1ο χαρακτηρα και μετα την δουλεια την κανει η puts και σου επιστρεφει το αποτελεσμα.

btw -> http://www.cprogramming.com/tutorial/c/quiz/quiz6.html

ενα πολυ δυσκολο τεστάκι ! Το περασα με 6 στα 6 :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++

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

Ναι!

Star_Light έγραψε:ενα πολυ δυσκολο τεστάκι ! Το περασα με 6 στα 6 :lol: :lol: :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, 21:31

migf1 έγραψε:Ναι!

Star_Light έγραψε:ενα πολυ δυσκολο τεστάκι ! Το περασα με 6 στα 6 :lol: :lol: :lol:

Το δύσκολο είναι σχετικό, εμένα δεν μου φαίνεται καθόλου δύσκολο :)


Εγω πιστευω δεν μπορεις να το λυσεις migf1 !!!!! -.- Παρα ειναι δυσκολο βρε αδερφε!
Γνώσεις ⇛ 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, 21:45

Star_Light έγραψε:Εγω πιστευω δεν μπορεις να το λυσεις migf1 !!!!! -.- Παρα ειναι δυσκολο βρε αδερφε!

Α, νόμιζα πως το έλεγες σοβαρά ότι είναι πολύ δύσκολο :)

Πάντως αν κάποιος θέλει να πάρει γεύση από πιο προχωρημένα πράγματα: http://www.codeproject.com/Articles/108 ... phism-in-C ;)
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, 21:55

migf1 έγραψε:
Star_Light έγραψε:Εγω πιστευω δεν μπορεις να το λυσεις migf1 !!!!! -.- Παρα ειναι δυσκολο βρε αδερφε!

Α, νόμιζα πως το έλεγες σοβαρά ότι είναι πολύ δύσκολο :)

Πάντως αν κάποιος θέλει να πάρει γεύση από πιο προχωρημένα πράγματα: http://www.codeproject.com/Articles/108 ... phism-in-C ;)


Mου την δινει η C++ γιατι έχει μεσα τα παντα.

Εχει τους δεικτες απο την C εχει τους κατασκευαστές απο την Java εχει την κληρονομικοτητα (αυτη δεν με ειχε δυσκολεψει στην Java) εχει τους πολυμορφισμους μεσα τις κλασεις..... της παναγιας τα ματια εχει γενικοτερα :/
Γνώσεις ⇛ 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, 22:03

Το link που έδωσα δείχνει έναν σχετικά εύκολο τρόπο να τα κάνεις όλα αυτά με C (tutorial για C είναι, όχι για C++).
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:03

Και μιας και διαβασα λιγο και διπλους δεικτες τωρα εχω να γραψω το εξης :

Κώδικας: Επιλογή όλων
#include<stdio.h>

int main()

{

int **p , a=2 ;
int *p2;

p2=&a;
p=&p2;

printf ("%d", **p); // before change
printf("%p", p2);
puts("\n");
printf("%p", *p); // same adress with p2

puts("\n");

**p=4;

printf("%d", **p); // after change


return 0;
}


Σε εναν διπλο δεικτη πρεπει να τον βάλεις να δειχνει αρχικα σε εναν αλλο δεικτη... για αυτο ετρωγα warning οταν ειχα παραθεσει
αυτο εδω -> viewtopic.php?f=6&t=18969&start=1690&http

στον σταματιου

http://www.eskimo.com/~scs/cclass/int/sx8.html

migf1 έγραψε:Το link που έδωσα δείχνει έναν σχετικά εύκολο τρόπο να τα κάνεις όλα αυτά με C (tutorial για C είναι, όχι για C++).


Sorry αλλα το περασα πολυ γρηγορα γιατι γκουγκλάριζα καποιο καλο chapter για διπλους δεικτες !
Θα το ξανακοιταξω !
Τελευταία επεξεργασία από Star_Light και 30 Ιαν 2012, 22:10, έχει επεξεργασθεί 2 φορά/ες συνολικά
Γνώσεις ⇛ 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, 22:05

Btw, την τέλειωσα τη βιβλιοθήκη που σας είπα... τεκμηρίωση (σχόλια) στις συναρτήσεις θα βάλω και θα την ποστάρω.
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:27

εγω εχω παρει φορα με τους δεικτες φιλε μου :D

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


//----------------------------------------------------------------------

#include<stdio.h>
void call_by_ref_sim(int **p);

int main()

{

int **p , a=2 ;
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=4;

printf("After change in main : %d " , **p);


call_by_ref_sim(p); // call


return 0;
}
//----------------------------------------------------------------------
// simulation of call by reference in C

void call_by_ref_sim(int **p)
{
**p=3;

printf("After change in call_by_ref_sim : %d ", **p);

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
Εκτύπωση

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

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