[CAPÍTULO 1] - [CAPÍTULO 2] - [CAPÍTULO 3]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7]
[PARTE 1] - [PARTE 2] - [PARTE 3] - [PARTE 4] - [PARTE 5] - [PARTE 6] - [PARTE 7]
Vetores para Ponteiros, Ponteiros para Vetores e Ponteiros para Ponteiros
Considere as declarações:
int * x [10]; int (* y)[10]; int * * z;Questões:
- O que significam?
- Quais dos usos abaixo são válidos?
int i,j,k[10],l[10][5],m[5][10]; x[1] = &i; x[3] = j; x[5] = k; x[7] = k[2]; x[9] = k + 5; x[0] = l[1]; x[2] = l + 1; x[4] = m[1]; x[6] = &l[3][2]; x[8] = m[3] + 2; y = &i; y = k; y[2] = k; y = &k; y = l; y = m; y = l[1]; y = m + 2; z = k; z = l; z = m;
Exercícios
- Seja o seguinte trecho de programa:
int i=3,j=5; int *p, *q; p = &i; q = &j;
- Qual é o valor das seguintes expressões ?
-
p == &i -
*p - *q -
**&p -
3* - *p/(*q)+7
-
- Qual será a saída do programa abaixo supondo que i ocupa o endereço 4094 na memória?
main() {
int i=5, *p;
p = &i;
printf(“%x %d %d %d %d \n”, p,*p+2,**&p,3**p,**&p+4);
}
- Qual é o resultado do seguinte programa?
#include <conio.h>
#include <stdio.h>
void main(){
float vet[5] = {1.1,2.2,3.3,4.4,5.5};
float *f;
int i;
f = vet;
printf("contador/valor/valor/endereco/endereco");
for(i = 0 ; i <= 4 ; i++){
printf("\ni = %d",i);
printf(" vet[%d] = %.1f",i, vet[i]);
printf(" *(f + %d) = %.1f",i, *(f+i));
printf(" &vet[%d] = %X",i, &vet[i]);
printf(" (f + %d) = %X",i, f+i);
}
}
- Considere os dois programas abaixo. O que fazem quando executados?
#include <conio.h>
#include <stdio.h>
void main() {
int vet[] = {4,9,12};
int i,*ptr;
ptr = vet;
for(i = 0 ; i < 3 ; i++) {
printf("%d ",*ptr++);
}
}
#include <conio.h>
#include <stdio.h>
void main(){
int vet[] = {4,9,12};
int i,*ptr;
ptr = vet;
for(i = 0 ; i < 3 ; i++) {
printf("%d ",(*ptr)++);
}
}
- Seja vet um vetor de 4 elementos: TIPO vet[4]. Supor que depois da declaração, vet esteja armazenado no endereço de memória 4092 (ou seja, o endereço de vet[0]). Qual o valor de vet+1, vet+2 e vet+3 se:
- TIPO = char?
- TIPO = int?
- TIPO = float?
- O que significam as seguintes declarações:
int * pi; int ** ppi; int * vpi[5]; int (* pvi)[3]; int (* pmi)[3][5]; int * mpi[5][3];
- Dê exemplo de uma declaração de:
- vetor para ponteiros para matrizes
- ponteiro para vetor de matrizes
- matriz de vetores de ponteiros
- matriz de ponteiros para vetores
- Reescreva o programa abaixo, substituindo o comando
whilepelo comandofor.
#include <stdio.h>
#define NUMS 5
void main (void)
{
int nums[NUMS] = {16,54,7,43,-5};
int total = 0, *n_pt;
n_pt = nums; /*armazena o endereço de nums[0] em n_pt*/
while (n_pt < nums + NUMS)
total+=*n_pt++;
printf(“O total dos elementos do vetor é %d”, total);
}
- Determine a saída do seguinte programa:
#include <stdio.h>
void arr(int (*val)[3])
{
printf(“\n %d”, *(*val));
printf(“\n %d”, *(*val +1));
printf(“\n %d”, *(*(val+1)+2));
printf(“\n %d”, *(*val)+1);
}
void main (void)
{
int nums[2][3]={{33,16,29},{54,67,99}};
arrs(nums);
}
- Dada a declaração para val na função arr, a referência val[1][2] é válida dentro da função?
Bibliografia e fonte:
- [CCT] Schildt, H. (1996) C, completo e total: 3a Ed.. São Paulo, Makron.
- LP, UFMA; Coutinho, Lucian. Linguagem de programação para ciencia da computação da ufma.http://www.deinf.ufma.br/~lrc/2009.1/LP/
- [K&R] KERNIGHAN, B. e RITCHIE, D. (1990) C, a linguagem de programação: padrão ANSI. Rio de Janeiro: Campus.
- DEITEL, H. M. (1999) Como programar em C. Rio de Janeiro: LTC.
- Módulo Consultoria e Informática (1989) Linguagem C: programação e aplicações. Rio de Janeiro: LTC.
Coloque aqui o seu email