1 – 15 de 15
Anônimo Anônimo disse...

uma coisa que percebi é que a primeira variável declarada sempre o numero do seu endereço é maior que a da segunda, por quê?

31 de maio de 2014 às 18:33

Anônimo Anônimo disse...

é que cada variável ocupa 4 Bytes de memória, então soma mais quatro de uma para outra, se for Double soma mais oito, char soma mais uma...

9 de agosto de 2014 às 12:54

Anônimo eduardo disse...

No gcc do ubuntu o primeiro exemplo da função sizeof dá esta mensagem de erro para os quatro tipos - char,int,float,double.
format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("Double: %d bytes\n",sizeof(double))
No dev - c não dá.

22 de outubro de 2014 às 06:19

Anônimo eduardo disse...

no primeiro exemplo da função sizeof()
o gcc dá esta mensagem de erro:
sizeof.c:15:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("Char: %d bytes\n",sizeof(char));
^
sizeof.c:16:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("Int: %d bytes\n",sizeof(int));
^
sizeof.c:17:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("Float: %d bytes\n",sizeof(float));
^
sizeof.c:18:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long unsigned int’ [-Wformat=]
printf("Double: %d bytes\n",sizeof(double));
no DEV - C não dá.

23 de outubro de 2014 às 19:18

Anônimo Anônimo disse...

quanto aos erros, para int é %d, char é %c, float e double é %f, se usar %d em todos vai dar erro em char,float e double, só vai funcionar para int

17 de novembro de 2014 às 07:10

Anônimo Anônimo disse...

Realmente %d, %c e %f são pra int, char e float, respectivamente. Pra double é %lf.
Mas o que se está mandando imprimir é endereço de memória, não char ou float ou outra coisa.
Outra coisa, warning não é erro.

21 de abril de 2015 às 16:54

Blogger Unknown disse...

Os blocos de memória são separados em ordem decrescente.

14 de agosto de 2015 às 09:33

Blogger Stanley Sathler disse...

Um detalhe interessante que pude notar é que o C não indexa na memória por ordem de declaração no código.

Isto é, se eu declaro dois ints e depois dois chars, ele não indexa primeiro os ints e depois os chars, mas o contrário.

Pelo que vi, a ordem fica:
- char
- int
- float
- double

31 de agosto de 2015 às 16:16

Anônimo Anônimo disse...

Na verdade, quando se trata de endereços de memória, alguns compiladores não aceitam o especificador de formato %d, nesse caso como no próprio aviso informa tem que ser usado um numero inteiro sem sinal, ou seja o %u.

28 de outubro de 2015 às 07:41

Anônimo Gabriel disse...

Uma coisa interessante é que independente de onde você declare ou realize o print das variáveis a alocação de memória é conforme descrito no texto por agrupamento de tipo, sendo sequencial.

Acredito que seja devido ao "compile and executing".

O compilador lê o programa inteiro e depois o executa por pilha de atividades, sendo assim ordenando automáticamente as posições de memória. (Posso estar errado em meus argumentos, se alguém souber complementar ou corrigir minha análise lógica... )

Enfim, bons estudos a todos e obrigado pelo curso, estou aprendendo bastante.

11 de abril de 2016 às 16:26

Blogger Christopher disse...

Para quem quer ficar livre dos warnings, use o %p ao invés de %d. Abs!

25 de abril de 2016 às 05:18

Blogger Unknown disse...


/* Eu NÃO percebi nenhum sequênciamento nos endereços de memória. Pra mim, continuaram aleatórios. O que houve com o endereço para 'Caracteres' ?? */

// As saídas foram essas:

// Caracteres: u@ ( e ïu@ (
// Inteiros: 0x28ff18 e 0x28ff14
// Floats: 0x28ff10 e 0x28ff0c
// Doubles: 0x28ff00 e 0x28fef8

7 de dezembro de 2016 às 08:59

Anônimo Anônimo disse...

Até onde eu saiba, se criar int X, y; não necessariamente ficarão um ao lado do outro, embora provavelmente fiquem. Deve ficar ao lado se declarar um vetor int x[10]; aí, sim, x[0] Ficar ao lado de x[1]. É o maior endereço vai depender da arquitetura do processador. Alguns processadores almoçam os bits invertidos.

8 de agosto de 2020 às 23:24

Blogger sarah disse...

Pode ser que eu tenha deixado algo passar (estou lendo esse blog na correria por razões de fim de semestre), mas não entendi o motivo de no primeiro código as variáveis do tipo char (caractere1 e caractere2) são escritas como '' %d '' no printf, já que %d é leitor de inteiro. Alguém sabe me dizer o porquê? No livro de C do Luís Damas, ele diz que é perigoso fazer isso e pode resultar em erros

8 de dezembro de 2021 às 22:24

Blogger Unknown disse...

Sarah, acredito que a resposta nao esta vindo a tempo, mas que isso seja um lembrete para nao deixar as coisas pra fazer de ultima hora.

O motivo de usar " %d" eh que nao eh o conteudo das variaveis do tipo char que esta sendo exibido, mas sim o endereco das variaveis do tipo char, que sempre eh um valor inteiro.

& sempre vai retornar um inteiro que corresponde ao endereco da variavel que vem logo apos o &

31 de janeiro de 2022 às 03:24

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.
Você pode usar algumas tags HTML, como <b>, <i>, <a>

A moderação de comentários foi ativada. Todos os comentários devem ser aprovados pelo autor do blog.

Depois de enviar seu comentário, será necessário fazer login.
Prove que você não é um robô