O Sistersinspirit.ca facilita a busca por soluções para perguntas cotidianas e complexas com a ajuda de nossa comunidade. Nossa plataforma de perguntas e respostas conecta você com especialistas prontos para fornecer informações precisas em diversas áreas do conhecimento. Obtenha soluções rápidas e confiáveis para suas perguntas de profissionais experientes em nossa abrangente plataforma de perguntas e respostas.
Sagot :
Resposta:
Os conceitos de endereço e ponteiro são fundamentais em qualquer linguagem de programação. Em C, esses conceitos são explícitos; em algumas outras linguagens eles são ocultos (e representados pelo conceito mais abstrato de referência). Dominar o conceito de ponteiro exige algum esforço e uma boa dose de prática.
Endereços
A memória RAM (= random access memory) de qualquer computador é uma sequência de bytes. A posição (0, 1, 2, 3, etc.) que um byte ocupa na sequência é o endereço (= address) do byte. (É como o endereço de uma casa em uma longa rua que tem casas de um lado só.) Se e é o endereço de um byte então e+1 é o endereço do byte seguinte.
Cada variável de um programa ocupa um certo número de bytes consecutivos na memória do computador. Uma variável do tipo char ocupa 1 byte. Uma variável do tipo int ocupa 4 bytes e um double ocupa 8 bytes em muitos computadores. O número exato de bytes de uma variável é dado pelo operador sizeof. A expressão sizeof (char), por exemplo, vale 1 em todos os computadores e a expressão sizeof (int) vale 4 em muitos computadores.
Cada variável (em particular, cada registro e cada vetor) na memória tem um endereço. Na maioria dos computadores, o endereço de uma variável é o endereço do seu primeiro byte. Por exemplo, depois das declarações
char c;
int i;
struct {
int x, y;
} ponto;
int v[4];
as variáveis poderiam ter os seguintes endereços (o exemplo é fictício):
c 89421
i 89422
ponto 89426
v[0] 89434
v[1] 89438
v[2] 89442
O endereço de uma variável é dado pelo operador & . Assim, se i é uma variável então &i é o seu endereço. (Não confunda esse uso de & com o operador lógico and, que se escreve && em C.) No exemplo acima, &i vale 89422 e &v[3] vale 89446.
Outro exemplo: o segundo argumento da função de biblioteca scanf é o endereço da variável que deve receber o valor lido do teclado:
int i;
scanf ("%d", &i);
Exercícios 1
Tamanhos. Compile e execute o seguinte programa:
int main (void) {
typedef struct {
int dia, mes, ano;
} data;
printf ("sizeof (data) = %d\n",
sizeof (data));
return EXIT_SUCCESS;
}
Compile e execute o seguinte programa. (O cast (long int) é necessário para que &i possa ser impresso com especificação de formato %ld. É mais comum imprimir endereços em notação hexadecimal, usando a especificação de formato %p, que exige o cast (void *).)
int main (void) {
int i = 1234;
printf (" i = %d\n", i);
printf ("&i = %ld\n", (long int) &i);
printf ("&i = %p\n", (void *) &i);
return EXIT_SUCCESS;
}
Ponteiros
Um ponteiro (= apontador = pointer) é um tipo especial de variável que armazena um endereço. Um ponteiro pode ter o valor
NULL
que é um endereço inválido. A macro NULL está definida na interface stdlib.h e seu valor é 0 (zero) na maioria dos computadores.
Se um ponteiro p armazena o endereço de uma variável i, podemos dizer p aponta para i ou p é o endereço de i. (Em termos um pouco mais abstratos, diz-se que p é uma referência à variável i.) Se um ponteiro p tem valor diferente de NULL então
*p
é o valor da variável apontada por p. (Não confunda esse operador * com o operador de multiplicação!) Por exemplo, se i é uma variável e p vale &i então dizer *p é o mesmo que dizer i.
A seguinte figura dá um exemplo. Do lado esquerdo, um ponteiro p, armazenado no endereço 60001, contém o endereço de um inteiro. O lado direito dá uma representação esquemática da sit
Explicação:
Obrigado por visitar nossa plataforma. Esperamos que tenha encontrado as respostas que procurava. Volte sempre que precisar de mais informações. Obrigado por visitar. Nosso objetivo é fornecer as respostas mais precisas para todas as suas necessidades informativas. Volte em breve. Obrigado por usar o Sistersinspirit.ca. Volte novamente para obter mais conhecimento dos nossos especialistas.