#include<stdio.h> struct student { int roll_no; int mark; struct student *p; } ; int main() { struct student *stu; stu=malloc(sizeof(struct student)); }
qual è il valore effettivo ritorno di un malloc()
per un
tipo di struttura? come viene assegnato al
variabile di struttura?
ora per la dichiarazione,
Struct student *stu;
allocazione della memoria è così
roll_no: 1000 - 1004 mark: 1004 - 1008 p: 1008 - 1012
e per la dichiarazione
stu=malloc(sizeof(struct student));
le mie ipotesi sono come segue
primo alloca blocco di memoria
diciamo solo 2000 - 2012
poi la parte di assegnazione
2000 stored at 1000 2004 stored at 1004 2008 stored at 1008
è così che funziona la parte di assegnazione per malloc()
e la struttura variabile o abbiamo
ipotesi.
En title : Return value of an malloc() for a structure type
malloc()
restituisce un puntatore ad un blocco di memoria (void *
) abbastanza grande da conteneresize
(primo argomento) byte indipendentemente da cosa sia l'argomento o a quale risultato si stia avviando.per esempio,
stu->roll_no
avrebbe accesso ai primi due byte (assumendo cheint
sia a 32 bit) della memoria allocata (assumendo che la struttura non sia imbottita).in C, i puntatori
void *
sono implicitamente convertiti nel tipo di puntatore a cui sono assegnati.prego fare le correzioni se ci è qualunque errore nella mia comprensione, in modo da per la dichiarazione, allievo della struttura * stu; 4 byte di spazio di memoria è assegnato per la dichiarazione seguente stu = malloc (sizeof (allievo della struttura)); il primo blocco di memoria è assegnato appena diciamo che alcuni 12 byte sono assegnati e l'indirizzo iniziale a quel blocco è assegnato a stu. quindi se diciamo stu- > roll _ no i primi 4 byte sono acceduti e se diciamo stu- > i contrassegni i 4 byte successivi saranno acceduti. e se diciamo stu- > p si accede ai prossimi 4 byte. e per chiarezza, diverso di una variabile normale della struttura che assegnerà 12 byte per lo studente della struttura mentre una variabile del puntatore della struttura alloca appena 4 byte.