parsifal Δημοσ. 6 Σεπτεμβρίου 2009 Δημοσ. 6 Σεπτεμβρίου 2009 ΑΑ και κατι τελευταιο!! η χρηση της malloc διαφερει καθολου στους δισδιαστατους πινακες? Παραθέτω από παλαιότερο post μου, ελπίζω να βοηθήσει: Τσούκου. realloc μπορείς να κάνεις και σε απλό δείκτη. Ένας διπλός δείκτης είναι απλά δείκτης προς έναν άλλον, απλό δείκτη. Αυτό, σε συνδυασμό με δυναμική δέσμευση μνήμης, σου επιτρέπει να εξομοιώνεις τη δημιουργία δυναμικών δισδιάστατων πινάκων, που θα μπορούσαν κάλλιστα να είναι και μη ορθογώνιοι. Π.χ ένας πίνακας Α[][]:┌─┐ ├─┼─┐ ├─┼─┼─┐ └─┴─┴─┘ Ένας «πίνακας» 3 γραμμών με μεταβλητό αριθμό στηλών ανά γραμμή. Για να καταλάβεις πώς γίνεται αυτό, δες σχηματικά τα παρακάτω: >int **A; Δεσμεύει μία θέση μνήμης, της οποίας το περιεχόμενο πρέπει να είναι η διεύθυνση μνήμης ενός άλλου δείκτη: > ┌─┐ └─┘ >A = (int**) malloc(3 * sizeof(int)); Δεσμεύει 3 συνεχόμενες θέσεις μνήμης, στην πρώτη από τις οποίες δείχνει ο A. Κάθε μία θέση αποτελεί ξεχωριστό δείκτη σε ακέραιο, οπότε μπορεί να αποθηκευθεί ως τιμή της η διεύθυνση μνήμης μίας μεταβλητής int: > ┌─┐ └─┘ │ ▼ ┌─┐ │ │ ├─┤ │ │ ├─┤ │ │ └─┘ >Α[0] = (int*) malloc(sizeof(int)); Α[1] = (int*) malloc(2 * sizeof(int)); Α[2] = (int*) malloc(3 * sizeof(int)); Δεσμεύει αντίστοιχα 1, 2 και 3 συνεχόμενες θέσεις μνήμης, που στην πρώτη από καθεμιά τους δείχνουν οι προηγούμενοι 3 δείκτες: > ┌─┐ └─┘ │ ▼ ┌─┐ ┌─┐ │ │──►└─┘ ├─┤ ┌─┬─┐ │ │──►└─┴─┘ ├─┤ ┌─┬─┬─┐ │ │──►└─┴─┴─┘ └─┘ Σκίστηκα λίγο να το βγάλω με ASCII art, αλλά πιστεύω ότι είναι αρκετά παραστατικό και θα σε βοηθήσει...
Firetrooper Δημοσ. 6 Σεπτεμβρίου 2009 Μέλος Δημοσ. 6 Σεπτεμβρίου 2009 Σας ευχαριστω παρα πολυ παιδια!! να στε καλα!!λυθηκαν οι αποριες πραγματικα ευχαριστω!
Evgenios1 Δημοσ. 6 Σεπτεμβρίου 2009 Δημοσ. 6 Σεπτεμβρίου 2009 Τα λεει πολυ ωραια εδω Allocate memory block Allocates a block of size bytes of memory, returning a pointer to the beginning of the block. δηλαδη ολα τα παρακατω ειναι σωστα. >// sdfsdf.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <stdlib.h> struct foo { int a; int b; int c; int e; }; struct fee { char a,z,x,y; double b; }; int _tmain(int argc, _TCHAR* argv[]) { int *intPtr=NULL; int **intPtr2=NULL; int ***intPtr3=NULL; foo *fooPtr=NULL; fee *feePtr=NULL; intPtr =(int*) malloc(16); intPtr2 =(int**)malloc(16); intPtr3 =(int***)malloc(16); fooPtr=(foo*)malloc(16); feePtr =(fee*)malloc(16); feePtr->a='e'; fooPtr->a=123; printf("foo:%d fee:%c",fooPtr->a,feePtr->a); getchar(); return 0; }
ippo00 Δημοσ. 9 Σεπτεμβρίου 2009 Δημοσ. 9 Σεπτεμβρίου 2009 Δεν σου επιστρέφει τις διευθύνσεις, θα σου επιστρέψει την διεύθυνση του πρώτου δεσμευμένου byte
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.