parte 2 – ponteiros (ou apontador)
notas acerca dos ponteiros, ou apontadores (aceder indirectamente a variáveis, através da sua localização):
Utilizar ponteiros para estabelecer a comunicação entre funções, se pretendo alterar o valor de uma variável dentro de uma função, tenho que passar como argumento um ponteiro para a variável e não uma copia do seu valor;
declaração: tipo *nome_ptr;
inicialização: tipo *nome_ptr = %qualquercoisaInt;
dois operadores:
& : obter o endereço de uma variável
* : aceder à variável para onde um ponteiro aponta
= : permite a atribuição entre ponteiros
notasM: quando faço p = &j; //estou a alterar o valor que está em j
notas acerca dos arrays (vetores):
[propriedade 1]
num array uni-dimensional a[i] ou *(a+i) é a mesma coisa. representam o primeiro elemento
[propriedade 2]
aritmética -> (p+i) ou (p-i) estou a deslocar posições dentro de um array
p+i equivalente a &a[i]
a[i] equivalente *(a+i)
declaração de uma função que recebe um vetor como argumento:
tipo funcao(tipo_de_vetor vetor[dimensao])
tipo funcao(tipo_de_vetor vetor[])
tipo funcao(tipo_de_vetor *vetor)
o uso da função é feito com nome do vector APENAS!
STRINGS
puts() //escreve strings <=> putchar()
strlen() //conta caracteres
strcat() //junta strings
tentar clearerr(stdin);
ao invés de usarmos array de caracteres (char st[TAM]) podemos usar ponteiro para carácter (char *p), vantagem? espaço em memória! Mas só funciona se as strings forem constantes.
como resolver isto?
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 4 void mostra1(char **vB){ for(int i=0; i<TAM; i++){ puts(vB[i]); } } void mostra2(char *vA){ for(int i=0; i<TAM; i++){ //puts( vA[i]); //printf("%d\n", vA[i]); } } int main() { char vetorA[TAM][10]={"pedro","andre","maria","carlos"}; char *vetorB[]={"portugal","espanha","marrocos","franca"}; mostra1(vetorB); puts(vetorA[1]); mostra2(vetorA[TAM]); return (0); }ainda sobre o strcmp e para relembrar
se == 0, significa que são iguais
se < 0, a primeira é mais pequena que a segunda se > 0, a segunda é maior do que a segundaTags : C, Learn C, linguagem C
0 thoughts on “parte 2 – ponteiros (ou apontador)”