Tradução adicional (#34485)
Traduzindo o nome de variáveis e comentários do código
This commit is contained in:
@ -8,7 +8,7 @@ Até agora você deve estar ciente de que C é uma linguagem de baixo nível, e
|
|||||||
|
|
||||||
#
|
#
|
||||||
```
|
```
|
||||||
type *var-name;
|
tipo *nomeVariavel;
|
||||||
```
|
```
|
||||||
Declaramos o tipo da variável como o exemplo acima, usamos asterisco (*) antes do nome do ponteiro.
|
Declaramos o tipo da variável como o exemplo acima, usamos asterisco (*) antes do nome do ponteiro.
|
||||||
|
|
||||||
@ -18,16 +18,16 @@ Declaramos o tipo da variável como o exemplo acima, usamos asterisco (*) antes
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
int main(void){
|
int main(void){
|
||||||
double my_double_variable = 10.1;
|
double variavelDouble = 10.1;
|
||||||
double *my_pointer;
|
double *meuPonteiro;
|
||||||
|
|
||||||
my_pointer = &my_double_variable;
|
meuPonteiro = &variavelDouble;
|
||||||
|
|
||||||
printf("value of my_double_variable: %f\n", my_double_variable);
|
printf("O valor da variavel double é: %f\n", variavelDouble);
|
||||||
|
|
||||||
++my_double_variable;
|
++variavelDouble;
|
||||||
|
|
||||||
printf("value of my_pointer: %f\n", *my_pointer);
|
printf("O valor do ponteiro é: %f\n", *meuPonteiro);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -35,8 +35,8 @@ Declaramos o tipo da variável como o exemplo acima, usamos asterisco (*) antes
|
|||||||
|
|
||||||
Saída:
|
Saída:
|
||||||
```
|
```
|
||||||
value of my_double_variable: 10.100000
|
O valor da variável double é: 10.100000
|
||||||
value of my_pointer: 11.100000
|
O valor do ponteiro é: 11.100000
|
||||||
```
|
```
|
||||||
|
|
||||||
Neste código, existem duas declarações. A primeira é uma inicialização típica de variável que cria um `double` e a define como 10.1. Novo em nossas declarações é o uso de `*` . O asterisco ( `*` ) é normalmente usado para multiplicação, mas quando o usamos colocando-o na frente de uma variável, ele diz a C que esta é uma variável de ponteiro.
|
Neste código, existem duas declarações. A primeira é uma inicialização típica de variável que cria um `double` e a define como 10.1. Novo em nossas declarações é o uso de `*` . O asterisco ( `*` ) é normalmente usado para multiplicação, mas quando o usamos colocando-o na frente de uma variável, ele diz a C que esta é uma variável de ponteiro.
|
||||||
@ -46,26 +46,26 @@ A próxima linha diz ao compilador onde isso está em outro lugar. Ao usar `&` d
|
|||||||
Com isso em mente, vamos dar uma olhada neste pedaço de código:
|
Com isso em mente, vamos dar uma olhada neste pedaço de código:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
double *my_pointer;
|
double *meuPonteiro;
|
||||||
// my_pointer now stored the address of my_double_variable
|
// meuPonteiro agora armazena o endereço da variavelDouble
|
||||||
my_pointer = &my_double_variable;
|
meuPonteiro = &variavelDouble;
|
||||||
```
|
```
|
||||||
|
|
||||||
`my_pointer` foi declarado e foi declarado como um ponteiro. O compilador C agora sabe que `my_pointer` vai apontar para um local de memória. A próxima linha atribui `my_pointer` um valor de localização de memória usando o `&` .
|
`meuPonteiro` foi declarado e foi declarado como um ponteiro. O compilador C agora sabe que `meuPonteiro` vai apontar para um local de memória. A próxima linha atribui `meuPonteiro` um valor de localização de memória usando o `&` .
|
||||||
|
|
||||||
Agora vamos dar uma olhada no que se refere a um meio de localização de memória para o seu código:
|
Agora vamos dar uma olhada no que se refere a um meio de localização de memória para o seu código:
|
||||||
|
|
||||||
```c
|
```c
|
||||||
printf("value of my_double_variable: %f\n", my_double_variable);
|
printf("O valor da variavelDouble é: %f\n", variavelDouble);
|
||||||
|
|
||||||
// Same as my_double_variable = my_double_variable + 1
|
// O mesmo que variavelDouble = variavelDouble + 1
|
||||||
// In human language, adding one to my_double_variable
|
// Em português, adiciona uma unidade em variavelDouble
|
||||||
++my_double_variable;
|
++variavelDouble
|
||||||
|
|
||||||
printf("value of my_pointer: %f\n", *my_pointer);
|
printf("O valor do ponteiro é: %f\n", *meuPonteiro);
|
||||||
```
|
```
|
||||||
|
|
||||||
Observe que, para obter o valor dos dados em `*my_pointer` , você precisará informar ao C que deseja obter o valor para o qual a variável está apontando. Tente executar este código sem o asterisco e você poderá imprimir a localização da memória, porque é isso que a variável `my_variable` está mantendo.
|
Observe que, para obter o valor dos dados em `*meuPonteiro` , você precisará informar ao C que deseja obter o valor para o qual a variável está apontando. Tente executar este código sem o asterisco e você poderá imprimir a localização da memória, porque é isso que a variável `variavelDouble` está mantendo.
|
||||||
|
|
||||||
Você pode declarar múltiplos apontadores em uma única instrução como com variáveis padrão, assim:
|
Você pode declarar múltiplos apontadores em uma única instrução como com variáveis padrão, assim:
|
||||||
|
|
||||||
@ -88,24 +88,23 @@ A aplicação mais comum de um ponteiro está em uma matriz. Matrizes, sobre as
|
|||||||
O programa a seguir troca os valores de duas variáveis dentro da função de `swap` dedicada. Para conseguir isso, as variáveis são passadas por referência.
|
O programa a seguir troca os valores de duas variáveis dentro da função de `swap` dedicada. Para conseguir isso, as variáveis são passadas por referência.
|
||||||
|
|
||||||
```c
|
```c
|
||||||
/* C Program to swap two numbers using pointers and function. */
|
/* Programa em C para trocar 2 números usando ponteiros e função. */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
void swap(int *n1, int *n2);
|
void troca(int *n1, int *n2);
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
int num1 = 5, num2 = 10;
|
int num1 = 5, num2 = 10;
|
||||||
|
// Endereço de num1 e num2 é passado para a função troca
|
||||||
// address of num1 and num2 is passed to the swap function
|
troca( &num1, &num2);
|
||||||
swap( &num1, &num2);
|
printf("Número 1 = %d\n", num1);
|
||||||
printf("Number1 = %d\n", num1);
|
printf("Número 2 = %d", num2);
|
||||||
printf("Number2 = %d", num2);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void swap(int * n1, int * n2)
|
void troca(int * n1, int * n2)
|
||||||
{
|
{
|
||||||
// pointer n1 and n2 points to the address of num1 and num2 respectively
|
// Os ponteiros n1 e n2 apontam para o endereço de num1 e num2 respectivamente
|
||||||
int temp;
|
int temp;
|
||||||
temp = *n1;
|
temp = *n1;
|
||||||
*n1 = *n2;
|
*n1 = *n2;
|
||||||
@ -115,13 +114,11 @@ O programa a seguir troca os valores de duas variáveis dentro da função
|
|||||||
|
|
||||||
Saída
|
Saída
|
||||||
```
|
```
|
||||||
Number1 = 10
|
Número 1 = 10
|
||||||
Number2 = 5
|
Número 2 = 5
|
||||||
```
|
```
|
||||||
|
|
||||||
Os endereços, ou localizações de memória, de `num1` e `num2` são passados para a `swap` funções e são representados pelos ponteiros `*n1` e `*n2` dentro da função. Então, agora os ponteiros `n1` e `n2` apontam para os endereços de `num1` e `num2` respectivamente.
|
Os endereços, ou localizações de memória, de `num1` e `num2` são passados para a função `troca` e são representados pelos ponteiros `*n1` e `*n2` dentro da função. Então, agora os ponteiros `n1` e `n2` apontam para os endereços de `num1` e `num2` respectivamente.
|
||||||
|
|
||||||
Então, agora o ponteiro n1 e n2 aponta para o endereço de num1 e num2, respectivamente.
|
|
||||||
|
|
||||||
Quando, o valor dos ponteiros é alterado, o valor na localização da memória apontada também muda de forma correspondente.
|
Quando, o valor dos ponteiros é alterado, o valor na localização da memória apontada também muda de forma correspondente.
|
||||||
|
|
||||||
@ -194,14 +191,14 @@ Podemos alterar o valor de ptr e também podemos alterar o valor do objeto ptr a
|
|||||||
{
|
{
|
||||||
int i = 10;
|
int i = 10;
|
||||||
int j = 20;
|
int j = 20;
|
||||||
int *ptr = &i; /* pointer to integer */
|
int *ptr = &i; /* Ponteiro para inteiro */
|
||||||
printf("*ptr: %d\n", *ptr);
|
printf("*ptr: %d\n", *ptr);
|
||||||
|
|
||||||
/* pointer is pointing to another variable */
|
/* Ponteiro está apontando para outra variável */
|
||||||
ptr = &j;
|
ptr = &j;
|
||||||
printf("*ptr: %d\n", *ptr);
|
printf("*ptr: %d\n", *ptr);
|
||||||
|
|
||||||
/* we can change value stored by pointer */
|
/* É possível mudar o valor armazenado em um ponteiro */
|
||||||
*ptr = 100;
|
*ptr = 100;
|
||||||
printf("*ptr: %d\n", *ptr);
|
printf("*ptr: %d\n", *ptr);
|
||||||
|
|
||||||
@ -219,13 +216,13 @@ Podemos mudar o ponteiro para apontar para qualquer outra variável inteira, mas
|
|||||||
{
|
{
|
||||||
int i = 10;
|
int i = 10;
|
||||||
int j = 20;
|
int j = 20;
|
||||||
const int *ptr = &i; /* ptr is pointer to constant */
|
const int *ptr = &i; /* ptr está apontando para constant */
|
||||||
|
|
||||||
printf("ptr: %d\n", *ptr);
|
printf("ptr: %d\n", *ptr);
|
||||||
*ptr = 100; /* error: object pointed cannot be modified
|
*ptr = 100; /* error: Objeto apontado não pode ser modificado
|
||||||
using the pointer ptr */
|
usando o ponteiro ptr */
|
||||||
|
|
||||||
ptr = &j; /* valid */
|
ptr = &j; /* Válido */
|
||||||
printf("ptr: %d\n", *ptr);
|
printf("ptr: %d\n", *ptr);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -242,14 +239,14 @@ Neste podemos mudar o valor da variável que o ponteiro está apontando. Mas nã
|
|||||||
{
|
{
|
||||||
int i = 10;
|
int i = 10;
|
||||||
int j = 20;
|
int j = 20;
|
||||||
int *const ptr = &i; /* constant pointer to integer */
|
int *const ptr = &i; /* Constante aponta para um inteiro */
|
||||||
|
|
||||||
printf("ptr: %d\n", *ptr);
|
printf("ptr: %d\n", *ptr);
|
||||||
|
|
||||||
*ptr = 100; /* valid */
|
*ptr = 100; /* Válido */
|
||||||
printf("ptr: %d\n", *ptr);
|
printf("ptr: %d\n", *ptr);
|
||||||
|
|
||||||
ptr = &j; /* error */
|
ptr = &j; /* Error */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -265,12 +262,12 @@ A declaração acima é ponteiro constante para variável constante, o que signi
|
|||||||
{
|
{
|
||||||
int i = 10;
|
int i = 10;
|
||||||
int j = 20;
|
int j = 20;
|
||||||
const int *const ptr = &i; /* constant pointer to constant integer */
|
const int *const ptr = &i; /* Ponteiro constante apontando para um inteiro constante */
|
||||||
|
|
||||||
printf("ptr: %d\n", *ptr);
|
printf("ptr: %d\n", *ptr);
|
||||||
|
|
||||||
ptr = &j; /* error */
|
ptr = &j; /* Error */
|
||||||
*ptr = 100; /* error */
|
*ptr = 100; /* Error */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -291,7 +288,7 @@ Na maioria das vezes, os acessos de ponteiro e array podem ser tratados como agi
|
|||||||
1) o operador sizeof
|
1) o operador sizeof
|
||||||
|
|
||||||
* `sizeof(array)` retorna a quantidade de memória usada por todos os elementos da matriz
|
* `sizeof(array)` retorna a quantidade de memória usada por todos os elementos da matriz
|
||||||
* `sizeof(pointer)` retorna apenas a quantidade de memória usada pela própria variável de ponteiro
|
* `sizeof(ponteiro)` retorna apenas a quantidade de memória usada pela própria variável de ponteiro
|
||||||
|
|
||||||
2) o operador &
|
2) o operador &
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user