Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2006-04-03 19:40:46

  etilen - Użytkownik

etilen
Użytkownik
Skąd: Gdańsk
Zarejestrowany: 2005-11-21

Wielkość typów <rozwiązany>

Hejka

Mały programik:

#include <stdio.h>
#include <stdlib.h>


/* struktura stanowiaca jednostke danych.
* zawiera konkretnr dane i opis ich typu */
typedef struct {
    unsigned char descriptor;
    void *dataEntity;
} dataStruct;



/* sluzy do wyciagania danych z struktury
* dataStruct */
void *printValue(dataStruct data){   
    if( data.descriptor =='s' )
        return (char *)data.dataEntity;
    else if( data.descriptor =='i' )
        return (int *)data.dataEntity;
    else if( data.descriptor =='d' )
        return (double *)data.dataEntity;
    return NULL;
}


/* ############## MAIN ################## */
int main(int argc, char *argv[]){   
        char string[] ="Ala ma kota";
        int number =1024;
        double dnumber=120.45642;
        int count;
   
        dataStruct *chain;
   
   
    chain =(dataStruct *)malloc(3*sizeof(dataStruct));
   
    chain[0].descriptor ='s';
    chain[0].dataEntity =string;
   
    chain[1].descriptor ='i';
    chain[1].dataEntity =&number;

    chain[2].descriptor ='d';
    chain[2].dataEntity =&dnumber;
   
    return 0;
}


I pytanko -ile miejsca zajmują kolejne elementy lancucha chain[0].descriptor, chain[1].descriptor i chain[3].descriptor skoro sam typ void* zajmuje 4B?

Pozdrawiam

Offline

 

#2  2006-04-03 23:38:01

  0dd - Członek DUG

0dd
Członek DUG
Skąd: Kraków
Zarejestrowany: 2006-03-25

Re: Wielkość typów <rozwiązany>

typy w jezyku c nie maja sztywnych ograniczen co do rozmiaru, dlatego nalezy uzywac funkcji sizeof().


apt-get install anarchism

Offline

 

#3  2006-04-04 11:36:59

  etilen - Użytkownik

etilen
Użytkownik
Skąd: Gdańsk
Zarejestrowany: 2005-11-21

Re: Wielkość typów <rozwiązany>

Hej

Chyba źle sformułowałem pytanie.

double numbers[20];
void *cos;
cos=numbers;

Wydaje mi się że elementy tablic cos i numbers powinny zajmować tyle samo miejsca w pamieci, a jest:

sizeof(cos) =4  /* tyle zajmuje wskaźnik void
sizeof(*cos)=1  /* tyle zajmuje void

A przecierz double będzie zajmować 8B

Jakieś pomysły?

Pozdrawiam

Offline

 

#4  2006-04-04 13:02:00

  adi - Użytkownik

adi
Użytkownik
Zarejestrowany: 2006-03-29

Re: Wielkość typów <rozwiązany>

Z tym *void jest chyba tak ze wskazuje na pierwszy bajt elementu.

>>double numbers[20], *double_ptr;
>>void *cos;
>>cos=numbers;

>>sizeof(cos) =4 /* tyle zajmuje wskaźnik void
>>sizeof(*cos)=1 /* tyle zajmuje void

double_ptr=numbers;
sizeof(double_ptr)=4
sizeof(double_ptr)=8

Tak samo jest z malloc(). Zwraca wskaznik do pierwszego bajtu obszaru pamieci ktory zostal przydzielony.

Offline

 

#5  2006-04-04 20:16:40

  etilen - Użytkownik

etilen
Użytkownik
Skąd: Gdańsk
Zarejestrowany: 2005-11-21

Re: Wielkość typów <rozwiązany>

To by się zgadzało... :)

I całe szczęście bo wykożystanie void* to chyba jedyny sposób na zrealizowanie kontenera o optymalnej wielkości w C.

Dzięki za rozwianie wątpliwości

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)