Hvilke argumenter gjør sizeof operatør tar i C?

stemmer
2

[ Original tittel referert til 'sizeof funksjon'. ]

Jeg prøvde disse og de alle arbeidet:

char * p;

printf ( Size of * p er% d \ n, sizeof (* p)); // resultat = 1
printf ( Size of p er% d \ n, sizeof (p)); // resultat = 4
printf ( Size of p er% d \ n, sizeof (og p)); // resultat = 4

Jeg lurer på hvorfor den første printf er 1, den andre og tredje er 4? Så hva argumenter kan sizeof kan faktisk ta?

Publisert på 12/10/2009 klokken 22:47
kilden bruker
På andre språk...                            


10 svar

stemmer
5

Det tar en type.

sizeof(char)er alltid en. Den variable pi seg selv er en peker, og på plattform som har en størrelse på 4. Deretter kan du gjøre &p, eller en peker til en peker, som også har en størrelse på fire.

På de fleste moderne stasjonære systemer, vil en 32-bits arkitektur har 4 byte pekere, mens en 64-bits arkitektur vil ha 8 byte pekere.

sizeofi seg selv er et nøkkelord, løses ved kompilering-tid, ikke en funksjon. I C99, kan arrays være variabel lengde, og sizeof vil vente til kjøretid for å løse denne størrelsen.

Svarte 12/10/2009 kl. 22:50
kilden bruker

stemmer
0
sizeof (char)   = 1
sizeof (void *) = 4

Den første er en fordi du passerer en røye. (p peker på en char) 2. og 3. anrop motta en char * / void * objekt, slik at de gir 4.

Svarte 12/10/2009 kl. 22:50
kilden bruker

stemmer
2

Fordi du arbeider på 32bit maskin.

*p is a character == 1 byte.
p  is a pointer   == 4 bytes.
&p is an address of a pointer == 4 bytes. Same as char**
Svarte 12/10/2009 kl. 22:51
kilden bruker

stemmer
0

Det første svaret er å si at en char er en byte. (Derefing pekeren til en selve char data)

Den andre er å si at pekerverdien er et 4 byte verdi, dvs. minneplasseringen er representert ved en 4 byte verdi.

Den tredje sier at adressen pekeren er en fire byte verdi.

Størrelse kan ta alle disse argumentene, og det er rapportering presis respons for alle verdiene.

Jubel.

Svarte 12/10/2009 kl. 22:51
kilden bruker

stemmer
10

sizeofer ikke en funksjon, det er et nøkkelord. Du kan droppe parentesene og det ville fungere helt fint. Fordi det ikke er en funksjon, det fungerer med alle typer eller et objekt som du gir den - det er mye mer fleksibel enn en funksjon.

Svarte 12/10/2009 kl. 22:51
kilden bruker

stemmer
7

sizeofer ikke en funksjon; det er en operatør. Den kan brukes på to måter: som sizeof(typename)og som sizeof expression. Parentes er nødvendig når det brukes med et typenavn. Parentes er ikke nødvendig når operand er et uttrykk, men for klarhet skyld mange programmerere vil parenthesize uttrykket uansett. Merk at i motsetning til de fleste programmeringsspråk operatører, sizeof expressionbetyr ikke evaluere sitt argument under normale omstendigheter, det vil si, når det operand er ikke en C99 variabel lengde array.

Svarte 12/10/2009 kl. 22:53
kilden bruker

stemmer
0

I tillegg til de andre svar, pass av mulige begreps mixup.

I C verden, er 'byte' det samme som 'char'. Dvs. at hver 'char' er en 'byte' av definisjonen. Denne betydningen av 'byte' er ikke nødvendigvis koblet til maskinen 'byte' i den underliggende maskinvaren. AC 'byte' (dvs. 'char') kan bestå av flere maskinens bytes '. Men i C-program har du ikke tilgang til maskin bytes. Alt måles i C 'bytes' (dvs. i 'tegn') og 'sizeof' gir din størrelse målt i 'tegn'.

Av disse grunner, 'sizeof (char)' er alltid en uavhengig av hvor mange maskin bytes hver 'char' faktisk består av.

Svarte 12/10/2009 kl. 23:06
kilden bruker

stemmer
0

Operanden i sizeofoperatør er en type.

Hvis du bruker sizeof med et objekt eller en verdi, er dens type som brukes i stedet.

sizeof 65; /* same as `sizeof (int);` */
sizeof 'X'; /* same as `sizeof (int);` */
sizeof 42.0; /* same as `sizeof (double);` */
float f;
sizeof f; /* same as `sizeof (float);` */
/* etc ... */

Du kan angi en type direkte til sizeof operatør (som i "samme som" over). Parentesen er nødvendig "å kaste operand til riktig type" (som i (int)2.5), ikke som syntaks for sizeofseg selv

#include <math.h>
sizeof (12 * log(100)); /* same as `sizeof (double);` */
                        /* without the parenthesis, this would be */
                        /* (sizeof 12) * log(100); */
Svarte 12/10/2009 kl. 23:53
kilden bruker

stemmer
1

Vær også oppmerksom på:

sizeof 'a' == 1   // C++ 

men

sizeof 'a' == 4   /* C */ 

(For å være nøyaktig, sizeof 'a' == sizeof (int) i C som lagt ut av PMG).

I C, 'a' blir forfremmet til en int før den evaulated. En av de få inkompatibilitet mellom de to språkene.

Svarte 25/10/2010 kl. 22:36
kilden bruker

stemmer
-1
Size of operator show the size of which data type we used 

#include<stdio.h>
int main()
{
int a;
float b;
char c;
double d;
printf("%d",sizeof(a));
printf("%d",sizeof(a));
printf("%d",sizeof(a));
printf("%d",sizeof(a));
} 
Answer a=4;
b=4;
c=1;
d=8

If you are using 8 bit compiler.
Svarte 09/06/2013 kl. 15:55
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more