Articles of sizeof

Usando sizeof com um array dinamicamente alocado

gcc 4.4.1 c89 Eu tenho o seguinte trecho de código: #include #include char *buffer = malloc(10240); /* Check for memory error */ if(!buffer) { fprintf(stderr, “Memory error\n”); return 1; } printf(“sizeof(buffer) [ %d ]\n”, sizeof(buffer)); No entanto, o sizeof (buffer) sempre imprime 4. Eu sei que um char * é de apenas 4 bytes. No […]

O tamanho de (bool) é definido?

Não consigo encontrar uma resposta na documentação padrão. É sizeof(bool) sempre 1 byte ou a implementação está definida?

O que significa o ‘nome da matriz’ no caso de uma matriz de pointers de caracteres?

No meu código: char *str[] = {“forgs”, “do”, “not”, “die”}; printf(“%d %d”, sizeof(str), sizeof(str[0])); Estou recebendo o resultado como 12 2 , então minhas dúvidas são: Por que há uma diferença? str e str[0] são pointers, certo?

Existem plataformas onde os pointers para diferentes tipos têm tamanhos diferentes?

O padrão C permite que pointers para tipos diferentes tenham tamanhos diferentes, por exemplo, sizeof(char*) != sizeof(int*) é permitido. No entanto, ele exige que, se um ponteiro for convertido em um void* e, em seguida, convertido de volta para seu tipo original, ele deve ser comparado como igual ao seu valor original. Portanto, segue logicamente […]

Por que o sizeof (x ++) não incrementa x?

Aqui está o código compilado no dev c ++ windows: #include int main() { int x = 5; printf(“%d and “, sizeof(x++)); // note 1 printf(“%d\n”, x); // note 2 return 0; } Espero que x seja 6 depois de executar a nota 1 . No entanto, a saída é: 4 and 5 Alguém pode […]

Por que um C-Array tem um valor sizeof () errado quando é passado para uma function?

Exemplo completo: #include void test(int arr[]) { int arrSize = (int)(sizeof(arr) / sizeof(arr[0])); printf(“%d\n”, arrSize); // 2 (wrong?!) } int main (int argc, const char * argv[]) { int point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); printf(“%d\n”, arrSize); // 3 (correct 🙂 ) test(point); return 0; } Antes de passá-lo para […]

Tamanho C de uma matriz passada

Duplicar Possível: Como encontrar o sizeof (um ponteiro apontando para uma matriz) Eu entendo que o operador sizeof é avaliado e substituído por uma constante em tempo de compilation. Dado que, como uma function, sendo passada matrizes diferentes em pontos diferentes em um programa, tem seu tamanho computado? Eu posso passá-lo como um parâmetro para […]

Existem máquinas, onde sizeof (char)! = 1, ou pelo menos CHAR_BIT> 8?

Existem máquinas (ou compiladores), onde sizeof(char) != 1 ? O padrão C99 diz que sizeof(char) na implementação de conformidade padrão DEVE ser exatamente 1? Se isso acontecer, por favor, me dê o número da seção e a citação. Update: Se eu tiver uma máquina (CPU), que não pode endereçar bytes (leitura mínima é de 4 […]

Por que os literais de caracteres C são ints em vez de chars?

Em C ++, sizeof(‘a’) == sizeof(char) == 1 . Isso faz sentido intuitivo, uma vez que ‘a’ é um literal de caractere e sizeof(char) == 1 conforme definido pelo padrão. Em C, no entanto, sizeof(‘a’) == sizeof(int) . Ou seja, parece que os literais de caracteres C são na verdade números inteiros. Alguem sabe por […]

Por que o tamanho de um parâmetro de array não é o mesmo que o main?

Por que o tamanho de uma matriz é enviado como um parâmetro igual ao main? #include void PrintSize(int p_someArray[10]); int main () { int myArray[10]; printf(“%d\n”, sizeof(myArray)); /* As expected, 40 */ PrintSize(myArray);/* Prints 4, not 40 */ } void PrintSize(int p_someArray[10]){ printf(“%d\n”, sizeof(p_someArray)); }