Vamos Programar? – Introdução à Programação #16
Apontadores: uma pequena introdução
O mundo está constantemente a evoluir: desde o mais pequeno inseto à espécie Humana. Dentro das palavras que mais ouvimos atualmente, incluímos “evolução”, “mudança”, “futuro”.
A tecnologia tem revolucionado o mundo das mais diversas formas: do mais simples aparelho para medir o tempo ao mais complexo acelerador de partículas. Se quer entrar no mundo da tecnologia e deixar a sua marca, pode começar aqui.
Infelizmente, e mais uma vez, esta semana não iremos ter vídeo porém garantimos que na próxima semana haverá. Antes de continuar, recomendamos uma breve leitura deste artigo no Pplware Kids onde explicamos a diferença entre bits e bytes.
Apontadores
Para os computadores tudo se resume a bits, ou seja, a zeros e a uns. Então, para os computadores, as diferenças que nós conhecemos entre os diversos tipos de variáveis (char, int, double/float, etc) são praticamente inexistentes.
Uma forma bastante utilizada para administrar o número enorme de 0's e 1's é através do endereçamento. Cada bocado da memória, cada variável, cada constante (Constante Declarada) tem o seu endereço único.
Quando uma variável é declarada é reservado, automaticamente, um espaço na memória que irá conter os valores desta mesma variável. Dentro do nosso computador existem micro-dispositivos cuja função está diretamente ligada com o endereçamento.
Os apontadores, também conhecidos por ponteiros ou pointers, são tipos de dados que serve para armazenar um endereço da memória. Apesar dos endereços de memória serem representados por números inteiros, não os confunda com o tipo de dados int.
Endereço de uma variável
Para nos referirmos ao endereço de uma variável, devemos utilizar o operador & (e comercial) antes do nome da variável. No exemplo seguinte, imprimo o endereço de memória onde está alocado o valor da variável "num" e "letra":
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> int main() { int num = 4; char letra = 'c'; printf("%p e %p", &num, &letra); return 0; } |
Como pode ver, neste caso foi utilizado %p visto que se refere a endereços de pointers. Eu recebi os valores 0028FF1C e 0028FF1B, mas a si é provável que a função retorne outros valores. Estes valores são o endereço da memória onde estão alocadas as variáveis acima mencionadas. Cada byte da memória RAM tem o seu endereço.
Daí que, em funções como, por exemplo, a scanf, utilizemos este operador antes do nome da variável para nos referirmos ao endereço de memória da variável e assim armazenar o valor nesse local.
Esta semana não iremos recomendar exercícios pois o conteúdo de hoje não é suficiente para novos exercícios. Porém, continue a praticar! Na próxima semana iremos continuar o tema dos apontadores.
Mais uma vez, gostávamos de saber a sua opinião. Caso tenha alguma dúvida, pode sempre utilizar os comentários para colocar a questão. Caso o faça, pedimos que utilize a keyword [DUVIDA] no início do seu comentários.
Esta saga |
Henrique Dias |
|
Mais episódios: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13][12] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23][24] |
Este artigo tem mais de um ano
Continua com esta Saga Henrique. Está a ser muito produtivo aprender programação.
Um Abraço.
Obrigado 🙂 Dentro de uns poucos meses poderá ter fim visto que esta é só de introdução =D Mas o “Vamos Programar?” poderá vir a estender-se…
Isso é que era de valor.
Por favor continua com estas aulas! Muito bom 😀
Obrigado. Continuaremos 🙂
Boas…
É bom ver artigos sobre programação em C…que é uma linguagem linda e que em muitos cursos mais de alto nível já nem se aprende infelizmente..
no printf e visto que estas a “printar” um endereço, fará mais sentido que seja mostrado no seu formato hexadecimal…é o formato standard para mostrar endereços de memoria, e nunca tens problemas 64bits/32bits e signed(d) e unsigned(u) 😉
ou seja, printf( “%p e %p”, ( void * ) &num, ( void * ) &letra );
se printares com “p”, nunca tens problemas 😉
uint64_t a=4000000000
arch:64 bits size of uint64_t : 8
o endereço é(printado com ‘p’) :0x7fff60f323a8 (valor realmente correcto 😉 )
o endereço é(printado com ‘d’) : 1626547112 (valor incorrecto…32 bits signed)
o endereço é(printado com ‘llu’) : 140734819935144 (correcto…mas funciona em POSIX, e é printado como um numero, não um endereço!)
o valor é(printado com ‘d’) :-294967296 (valor incorrecto…32 bits signed)
o valor é(printado com ‘llu’) :4000000000 (correcto…mas funciona em POSIX)
Olá mais uma vez lmx! 🙂
Obrigado pela útil informação. Irei adicionar essa parte ao artigo e atualizar o PDF. 🙂
de nada Henrique,
estas a fazer um bom trabalho, e a divulgar uma linguagem de programação, que é muito poderosa!
O obrigado é da minha parte 😉
Abraço
Como sugestão para prolongar o “Vamos programar” que tal um tutorial de introdução a programação WEB? php ou outra linguagem visto atualmente o mercado estar mais virado para web? 😉
Parabéns e continuem o bom trabalho que têm efetuado.
Olá José!
Em primeiro lugar, gostaria de lhe agradecer. Em segundo, sim, há intenções para prolongar a saga “Vamos Programar?”.
Eu, pessoalmente, estou mais à vontade com a linguagem PHP. Pode ser que em breve falemos dela 🙂
Cumprimentos,
Henrique Dias