2. Exercícios sob o corredor
1. Cordas e indicadores
Por favor, escreva os resultados do seguinte programa
#include<stdio.h>
int main( )
{ char string[30]="How_are_you" ;
char *p=&string[0], *p2=string+8;
printf("%s,%s\n" , p , p2 ) ;
}
O resultado do programa em execução é:
#include <stdio.h>
int main()
{
printf("_______________________");
}
Idéia: * p é um símbolo de declaração de ponteiro, e o nome da tabela p é uma variável de ponteiro. Ao atribuir o endereço de uma variável ou o primeiro endereço de um ponteiro a uma variável p, significa que a variável de ponteiro de p aponta para esse valor. A string é lida até o final.
Resposta: Como você está, você
2. O
problema do ponteiro na matriz : A seguinte definição de matriz é fornecida: int a [3] [4] = {{1,3,5,7}, {9,11,13,15}, {17,19,21 , 23}}; Calcule os valores dos seguintes itens (defina o primeiro endereço da matriz a para 2000 e um número do tipo int ocupa quatro bytes).
Escreva um programa e imprima uma linha por solicitação.
(1)a[2][1] (2)a[1] (3)a (4)a+1
(5)*a+1 (6)*(a+1) (7)a[2]+1 (8)*(a+1)+1
(9)*(*(a+2)+2)
Resposta:
#include<stdio.h>
int main(){
printf("19\n");
printf("2016\n");
printf("2000\n");
printf("2016\n");
printf("2004\n");
printf("2016\n");
printf("2036\n");
printf("2020\n");
printf("21\n");
return 0;
}
Análise:
数组: 数组下标:
1 3 5 7 00 01 02 03
9 11 13 15 10 11 12 13
17 19 21 23 20 21 22 23
(1)a[2][1]的值
(2)a[1],代表第二行的首地址,2000+4*4=2016
(3)a,代表a[0][0]的地址,2000
(4)a+1,代表a[1][0]的地址,2016
(5)*a+1,代表a[0][1]的地址,2000+4=2004
(6)*(a+1) ,代表a[1][0]的地址,2016
(7)a[2]+1 ,代表a[2][0]的地址的下一位,即a[2][1]的地址,2000+4*9=2036
(8)*(a+1)+1,*(a+1)为第二行的首地址即a[1][0],然后再把这个地址+1,即a[1][1]的地址,2016+4=2020
(9)*(*(a+2)+2),*(a+2)为a[2][0]的地址,*(a+2)+2为a[2][2]的地址,最外面加*,为a[2][2]的值21.