jayanson Posted December 2, 2011 Report Share Posted December 2, 2011 Boa tarde galera estou com dificuldade para fazer um exercicio em c mas ate agora so quebrei a cabeça. alguém pode me ajudar ?segue o que pedeDeclare vetores de inteiro, char, float, double, long int com 5 posições, da seguinte forma: int v[5] = {2,5,1,4,0}; char c[5] = {‘a’,’b’,’m’, ‘4’,’-‘}; float v[5] = {2.66, 0.125, 1.0, 4.99, 2.009}; Usando a função printf, com o argumento “%p”, e com vetores apontando para cada um dos tipos de dados, descubra quantos bytes é alocado pelo seu compilador a cada tipo de dados. Não se esqueça que para um vetor apontar para um vetor de float, ele deve ser do tipo float. Como se sabe que em um vetor as posições são contínuas, se for impresso o endereço de duas posições, pela diferença entre os dois endereços pode-se descobrir quantos bytes são alocados. Quote Link to comment Share on other sites More sharing options...
0 mJi Posted December 2, 2011 Report Share Posted December 2, 2011 Basicamente, percorra cada vetor e dê um printf com o argumento %p. O %p imprime o endereço da variável na memória (em hexadecimal).Exemplo considerando vetores de 5 posições:for(i=0;i<5;i++) printf("%p ", v[i]); Quote Link to comment Share on other sites More sharing options...
0 jayanson Posted December 2, 2011 Author Report Share Posted December 2, 2011 fiz assim mas não deu certo pode verificar por favor ?#include <stdio.h>#include <stdlib.h> main () { int a[5]={2,5,1,4,0}; char b[5]={'a','b','m','4','-'}; float c[5]={2.66,0.125,1.0,4.99,2.009}; double d[5]={1.0e6,256000.45672,23e10,10000000.99999,123456.123456}; long int e[5]={123456789,999999999,22222222,11111111,987654321}; int x; printf("A quntidade de bytes alocados para: \n"); printf("int a : %p-%p",&a[4]-&a[0]); printf("\n \n"); printf("char b : %p %p",&b[4]-&b[0]); printf("\n \n"); printf("float c : %p %p",&c[4]-&c[0]); printf("\n \n"); printf("double d : %p %p",&d[4]-&d[0]); printf("\n \n"); printf("long int e : %p %p",&e[4]-&e[0]); printf("\n"); printf("%p",&a[0]); system("pause"); return 0; } Quote Link to comment Share on other sites More sharing options...
0 Dan Oliveira Posted December 2, 2011 Report Share Posted December 2, 2011 (edited) Acho que seria esse o programa, mas não te daria a quantidade de bytes alocados como disse o amigo;#include <stdio.h> main () { int a[5]={2,5,1,4,0}; char b[5]={'a','b','m','4','-'}; float c[5]={2.66,0.125,1.0,4.99,2.009}; double d[5]={1.0e6,256000.45672,23e10,10000000.99999,123456.123456}; long int e[5]={123456789,999999999,22222222,11111111,987654321}; int i; printf("A quantidade de bytes alocados para: \n\n"); for(i=0; i<5;i++) { printf("Vetor int a[%d]:%14p\n", i ,a[i]); printf("Vetor char b[%d]:%13p\n", i , b[i]); printf("Vetor float c[%d]: %11p\n", i , c[i]); printf("Vetor double d[%d]: %10p\n", i , d[i]); printf("Vetor long int e[%d]: %p\n\n", i , e[i]); } getchar(); return 0; } Edited December 2, 2011 by Dan Oliveira Quote Link to comment Share on other sites More sharing options...
0 mJi Posted December 2, 2011 Report Share Posted December 2, 2011 É melhor fazer um for para cada tipo. Facilita para visualizar a disposição dos endereços de memória.Mas é isso ae que o Dan postou. Quote Link to comment Share on other sites More sharing options...
Question
jayanson
Boa tarde galera estou com dificuldade para fazer um exercicio em c mas ate agora so quebrei a cabeça. alguém pode me ajudar ?
segue o que pede
Declare vetores de inteiro, char, float, double, long int com 5 posições, da seguinte forma:
int v[5] = {2,5,1,4,0};
char c[5] = {‘a’,’b’,’m’, ‘4’,’-‘};
float v[5] = {2.66, 0.125, 1.0, 4.99, 2.009};
Usando a função printf, com o argumento “%p”, e com vetores apontando para cada um dos tipos de
dados, descubra quantos bytes é alocado pelo seu compilador a cada tipo de dados. Não se esqueça que
para um vetor apontar para um vetor de float, ele deve ser do tipo float. Como se sabe que em um vetor
as posições são contínuas, se for impresso o endereço de duas posições, pela diferença entre os dois
endereços pode-se descobrir quantos bytes são alocados.
Link to comment
Share on other sites
4 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.