Skip to content

Instantly share code, notes, and snippets.

@KennedyTedesco
Last active July 31, 2020 15:26
Show Gist options
  • Save KennedyTedesco/0a42fede17929e07dbbe6139b9afd2c4 to your computer and use it in GitHub Desktop.
Save KennedyTedesco/0a42fede17929e07dbbe6139b9afd2c4 to your computer and use it in GitHub Desktop.
#include <stdio.h>
int main() {
int years[] = {2016, 2017, 2018};
char *langs[] = {"PHP", "GO", "Rust"};
// Ponteiro genérico, recebe qualquer endereço sem ser importar com o tipo associado
void *ptr;
// "ptr" agora tem o endereço do primeiro ano
ptr = years;
// Primeiro ano
// Pra operar nessa memória temos que fazer casting pro tipo associado.
printf("Ano: %d - %d - %d\n", *(int *)ptr, *years, years[0]);
// São todas as formas válidas de obter o endereço do valor 2016
printf("Endereço: %p - %p - %p - %p - %p\n\n", ptr, &(*ptr), &(*years), &years[0], years);
// Ano: 2016 - 2016 - 2016
// Endereço: 0x7ffcdffcc8e0 - 0x7ffcdffcc8e0 - 0x7ffcdffcc8e0 - 0x7ffcdffcc8e0 - 0x7ffcdffcc8e0
// Segundo ano
printf("Ano: %d - %d - %d\n", *(int *)ptr + 1, *years + 1, years[1]);
printf("Endereço: %p - %p - %p\n", ((int *)ptr + 1), years + 1, &years[1]);
// Ano: 2017 - 2017 - 2017
// Endereço: 0x7ffcdffcc8e4 - 0x7ffcdffcc8e4 - 0x7ffcdffcc8e4
// "ptr" agora tem o endereço do início da primeira linguagem
ptr = langs;
printf("\n%c", **(char **)ptr); // P
printf("\n%c", *(*(char **)ptr + 1)); // H
printf("\n%c", *(*(char **)ptr + 2)); // P
printf("\n\n");
printf("Linguagem: %s - %s - %s\n", *(char **)ptr, *langs, langs[0]); // PHP - PHP - PHP
printf("Linguagem: %s - %s - %s\n", *(((char **)ptr) + 1), *(langs + 1), langs[1]); // GO - GO - GO
printf("Linguagem: %s - %s - %s\n", *(((char **)ptr) + 2), *(langs + 2), langs[2]); // Rust - Rust - Rust
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment