Escolar Documentos
Profissional Documentos
Cultura Documentos
Explique rapidamente (2 linhas) porque esses valores foram obtidos. 2. Sabemos que C armazena arrays (vetores, matrizes, etc.) em linha e que podemos utilizar a seguinte equao de equivalncia para matrizes: addr(m[i,j]) = addr(m[0,0]) + (i * nmero_de_cols * sizeof(tipo)) + ( j * sizeof(tipo)) ) onde addr( ) representa o endereo da posio da matriz isso pseudocdigo, em C seria o &. No programa abaixo, ptr aponta para o incio da matriz mat. Escreva a expresso faltando, de forma que ela recupere o valor de value da posio lin e col, utilizando o ponteiro ptr. Obs: a sada esperada do programa 8 == 8.
#include <stdlib.h> #include <stdio.h> int mat[4][3] = { { 1, 2, 3}, { 4, 5, 6}, { 7, 8, 9}, {10, 11, 12} }; int main() { int value; int *ptr; int lin = 2; int col = 1;
ptr = (int*)mat; value = _________________________________; printf("%d == %d\n", mat[lin][col], value); return EXIT_SUCCESS; }
3. Por que a varivel value da funo show() mostra os valores informados na funo main?
#include <stdlib.h> #include <stdio.h> void show() { int value; printf("%d\n", value); } int* get_address() int tmp; return &tmp; } {
int main() { int *ptr; ptr = get_address(); *ptr = 123; show(); *ptr = 456; show(); *ptr = 789; show(); return 0; }
union Values { struct Chars chs; int num; }; int main() { union Values vs; printf("%ld\n", sizeof(union Values)); vs.num = 0; vs.chs.a = 1; /* A */ printf("%d\n", vs.num); vs.num = 0; vs.chs.d = 1; /* D */ printf("%d\n", vs.num);
return 0; }
5.1. O programa abaixo imprime o endereo da varivel p. Complete o programa abaixo, de tal forma a imprimir na tela os deslocamentos descritos no item anterior.
#include <stdlib.h> #include <stdio.h> struct Person { int idade; char nome[30]; char endereco[30]; double salario; }; int main() { struct Person p; printf("%ld\n", (long)&p); /* Complete aqui */ return 0; }