Ponteiros - Saindo de Pesadelos
Aqui, vou explicar como trabalhar com ponteiros em C da forma mais fácil possível, tentarei mostrar algo avançado
também. Enfim, quer aprender a usar ponteiro? Leia este artigo, nunca mais irá apanhar.
também. Enfim, quer aprender a usar ponteiro? Leia este artigo, nunca mais irá apanhar.
Parte 2: Ponteiros, ponteiros para função...
Vamos entender algumas práticas comuns, e depois partir para exemplos:
Fique calmo, não é para decorar. Tenha em mente: leitura da esquerda para direita, e sempre começando pelo nome da variável.
Uma prática muito comum em C, é usar Void Pointer, para muitos que estão iniciando não é normal de se ver, entretanto, estudando códigos de terceiros, pode-se ver muito.
Usar Ponteiro colabora no desempenho e o código em Assembly gerado, fica menor de fato. Um 'Disassemble Main' no GDB pode te dar ponto empírico.
Um exemplo vale mais do que mil palavras:
Outro exemplo, seguindo a mesma lógica:
Outra prática muito vista: Ponteiro de arrays para funções.
Vejamos um terceiro exemplo:
- int i -> Int variável 'i'
- int *p -> 'P' ponteiro para um int
- int a[] -> Matriz 'a' de Int
- int f() -> 'F' função com valor de retorno do tipo int
- int **p -> 'Pp' ponteiro para um ponteiro para um int
- int (*pa)[] -> 'Pa' ponteiro para um array de int
- int (*pf)() -> pf ponteiro para uma função com valor de retorno int
- int *p[] -> Array 'p' de ponteiros para um int
- int *var() -> Função "var", que retorna um ponteiro para um int
- int ***var -> 'var' ponteiro para um ponteiro para um ponteiro para um int
- int (**var)[] -> 'var' ponteiro para um ponteiro para um array de int
- int (**var)() -> 'var' ponteiro para um ponteiro para uma função com valor de retorno do tipo int
- int *(*c)[] -> 'c' ponteiro para uma matriz de ponteiros para um int
- int *(*c)() -> "c 'ponteiro para uma função com valor de retorno do tipo ponteiro para um int
- int **app[] -> 'App' ponteiro para um ponteiro para uma matriz de ponteiros para um int
- int (*b[])[] -> Uma série de 'b' ponteiros para um array de int
- int (*c[])() -> Um array 'c' ponteiros para uma função com valor de retorno do tipo int
- int ***fpp() -> "Fpp 'função que retorna um ponteiro para um ponteiro para um ponteiro para um int
- int (*fpa())[] -> Função 'fpa ", que retorna um ponteiro para um array de int
- int (*fpf())() -> "FPF" função que retorna um ponteiro para uma função com valor de retorno int
Fique calmo, não é para decorar. Tenha em mente: leitura da esquerda para direita, e sempre começando pelo nome da variável.
Uma prática muito comum em C, é usar Void Pointer, para muitos que estão iniciando não é normal de se ver, entretanto, estudando códigos de terceiros, pode-se ver muito.
Usar Ponteiro colabora no desempenho e o código em Assembly gerado, fica menor de fato. Um 'Disassemble Main' no GDB pode te dar ponto empírico.
Um exemplo vale mais do que mil palavras:
Outro exemplo, seguindo a mesma lógica:
Outra prática muito vista: Ponteiro de arrays para funções.
Vejamos um terceiro exemplo: