Pequena dúvida em C

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

Pequena dúvida em C

Mensagempor jplcastro » Sábado Jan 02, 2010 17:58

Gostava de saber o que é que a expressão (char*) faz no seguinte código:

#include <stdio.h>
main()
{
int num, *pi;
char *pc;
printf("Escreve um número inteiro: "); scanf("%d", &num);
pi=&num;
pc=(char*)pi;
printf("O valor do primeiro byte é: %d\n", (int)(*pc));
printf("O valor do segundo byte é: %d\n", (int)(*pc+1));
printf("O valor do terceiro byte é: %d\n", (int)(*pc+2));
printf("O valor do quarto byte é: %d\n", (int)(*pc+3));
}


Este código tem como objectivo escrever o valor dos bytes do número inteiro inserido.
jplcastro
Novato
Novato
 
Mensagens: 3
Registado: Sábado Jan 02, 2010 17:56

Mensagempor bigslb » Sábado Jan 02, 2010 18:26

pi é um ponteiro para inteiro e pc um ponteiro para char.
ao fazer o scanf e guardado no inteiro num e depois em pi fica o endereço dessa variavel (pi=&num ).

se pretendes guardar em pc o valor de pi tens de converter explicitamente antes, é isso k faz o (char*).
P4 775 3.0
Albatron PX915PC Pro-G
4x512 DDR400 VData/G.Skill ZX
Sapphire X700Pro
WD 320Gb SATA II 16MB
All in a Aerocool Extremeengine 3t
bigslb
Membro Diamante
Membro Diamante
 
Mensagens: 1426
Registado: Quinta Ago 18, 2005 17:16
Localização: Massamá

Mensagempor jplcastro » Sábado Jan 02, 2010 18:45

Já percebi!
Muito obrigado ;)
jplcastro
Novato
Novato
 
Mensagens: 3
Registado: Sábado Jan 02, 2010 17:56

Mensagempor jplcastro » Domingo Jan 03, 2010 0:13

desculpa voltar a incomodar mas reparei agora no seguinte:

meto por exemplo o número 4, o programa responde com 4, 5, 6 e 7 como valores para o 1º, 2º, 3º e 4º byte respectivamente.

isto está correcto?

penso que na aula de programação que tive, com este código, o programa não respondia assim... ele está a dar-me o número que insiro para o valor do 1º byte, o valor que insiro + 1 para o valor do 2º byte, etc... não estou a entender
jplcastro
Novato
Novato
 
Mensagens: 3
Registado: Sábado Jan 02, 2010 17:56

Mensagempor JoaoRosa » Domingo Jan 03, 2010 1:07

boas...

eh pah, destesto c, trabalho um pouco num nível acima, mas se quere so primeiro byte tens de ver no "0" e não no "1"... embora só tenha olhado para o teu programa na diagonal e só com um olho...

se disse alguma barbaridade corrigam-me sff.

cps
Portátil: LG LW65-P4XP c/ upgrade: Seagate Momentus 7200.1 (2.5" IDE 7200rpm 80Gb) & 2x1GB Kingston PC 4200 533 MHz DDR2
Disco Externo: Caixa Point of View Hdd Enclosure 2.5" & Disco Fujitsu MHV2080AT (2.5" IDE 4200rpm 80Gb)
Avatar do Utilizador
JoaoRosa
Membro de Prata
Membro de Prata
 
Mensagens: 439
Registado: Quinta Nov 03, 2005 21:38
Localização: Oliveira de Azeméis

Mensagempor LMX » Segunda Jan 04, 2010 23:23

boas..
como não estás a perceber??daqui a pouco quem não percebe sou eu... :lol: .
printf("O valor do primeiro byte é: %d\n", (int)(*pc));
printf("O valor do segundo byte é: %d\n", (int)(*pc+1));
se ao malor 4 colocas mais um é normal que de 5!
o que o *pc faz é aceder ao valor apontado por PC, ou seja ao 4, se a este 4 somas um é normal que dê 5.

so não percebo o cast explicito para inteiro?! visto que sendo o 4...ate 255 numeros que cabem num char.

Cumps

obs->é evidente que por questões de optimização quando reservas espaço para um char reservas é para um inteiro, pois o acesso a memoria é mais rapido trazendo logo 4 bytes de cada vez, mas isso é outra historia, e existe forma de a contornar, ou seja de poupar RAM, pondo em causa velocidade nos acessos a RAM.Já ha muito ouço dizer...não se pode ter tudo.
De pé mas...Cansado!!!
LMX
Membro de Ouro
Membro de Ouro
 
Mensagens: 786
Registado: Quarta Out 20, 2004 21:16
Localização: Lisboa


Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 0 visitantes

cron