Enviado em 13/03/2008 - 17:08h
Ola!!!!
Estou aqui para poder debater a respeito de ponteiros e vetores.
O que é um ponteiro
O ponteiro contem o endereço de um tipo. Exemplo.. Voce quer falar com sua mae mais nao tem o numero de telf. Entao voce sabe que a sua erma tem o numero de telf da sua mae.Entao ela e o ponteiro. Usando o ponteiro voce nao falara com sua mae, voce so vai poder obter o numero de telf dela.
Outro exempl -> O que é o ponteiro de um relógio? É o que aponta para as horas, minutos ou segundos. Um ponteiro aponta para algo. Em programação, temos as variáveis armazenadas na memória, e um ponteiro aponta para um endereço de memória.
Imagine as variáveis como documentos, a memória do computador como pastas para guardar os documentos, e o ponteiro como atalhos para as pastas.
Não se desespere caso não consiga entender num primeiro momento, o conceito fica mais claro com a prática.
Declarando e acessando ponteiros
Um ponteiro, como qualquer variável, deve ter um tipo, que é o tipo da variável para a qual ele apontaPara declarar um ponteiro, especificamos o tipo da variável para a qual ele aponta e seu nome precedido por asterisco:
int minha_mae; // declara uma variável comum do tipo inteiro
int *minha_erma; // declara um ponteiro para um inteiro
Vetores de Ponteiros
Como ponteiros também são variáveis é possível então criar vetores de ponteiros e utilizá-los. O programa exemplo c8vepon.c mostra um programa onde é utilizado um vetor de ponteiros para linhas de caracteres.
#define LINHAS 10
#define COLUNAS 60
/* prototipos das funcoes */
void alocaespaco(char *linha[]);
void lelinhas (char *linha[]);
void imprimelinhas (char *linha[]);
void ordenalinhas (char *linha[]);
void main(void)
{
char *linha[LINHAS];
alocaespaco(linha);
lelinhas(linha);
imprimelinhas(linha);
ordenalinhas(linha);
imprimelinhas(linha);
}
/* Esta rotina aloca espaco para as linhas */
void alocaespaco(char *linha[]){
int i;
for (i=0; i<LINHAS; i++){
if (!(linha[i] = malloc(COLUNAS*sizeof(int)))){
printf("Nao consegui alocar o vetor %d.\n", i);
exit(i);
}
}
}
/* Esta rotina le linhas */
void lelinhas (char *linha[]){
int i;
for (i=0; i<LINHAS; i++){
printf("Entre com a linha %d.\n", i);
gets(linha[i]);
}
}
/* Esta rotina imprime as linhas */
void imprimelinhas (char *linha[]){
int i;
for (i=0; i<LINHAS; i++){
printf("Linha %d %s.\n", i, linha[i]);
}
}
void ordenalinhas( char *linha[]){
char trocou;
char *p;
int i;
do {
trocou = 0;
for (i=0; i<LINHAS-1; i++){
if (strcmp(linha[i], linha[i+1]) >0){
p = linha[i];
linha[i] = linha[i+1];
linha[i+1] = p;
trocou = 1;
}
}
} while (trocou);
}
bom aqui tem um pouquinho sobre o assunto quem poder colaborar com mais coisas vai ser bacana.
Estou aqui para poder debater a respeito de ponteiros e vetores.
O que é um ponteiro
O ponteiro contem o endereço de um tipo. Exemplo.. Voce quer falar com sua mae mais nao tem o numero de telf. Entao voce sabe que a sua erma tem o numero de telf da sua mae.Entao ela e o ponteiro. Usando o ponteiro voce nao falara com sua mae, voce so vai poder obter o numero de telf dela.
Outro exempl -> O que é o ponteiro de um relógio? É o que aponta para as horas, minutos ou segundos. Um ponteiro aponta para algo. Em programação, temos as variáveis armazenadas na memória, e um ponteiro aponta para um endereço de memória.
Imagine as variáveis como documentos, a memória do computador como pastas para guardar os documentos, e o ponteiro como atalhos para as pastas.
Não se desespere caso não consiga entender num primeiro momento, o conceito fica mais claro com a prática.
Declarando e acessando ponteiros
Um ponteiro, como qualquer variável, deve ter um tipo, que é o tipo da variável para a qual ele apontaPara declarar um ponteiro, especificamos o tipo da variável para a qual ele aponta e seu nome precedido por asterisco:
int minha_mae; // declara uma variável comum do tipo inteiro
int *minha_erma; // declara um ponteiro para um inteiro
Vetores de Ponteiros
Como ponteiros também são variáveis é possível então criar vetores de ponteiros e utilizá-los. O programa exemplo c8vepon.c mostra um programa onde é utilizado um vetor de ponteiros para linhas de caracteres.
#define LINHAS 10
#define COLUNAS 60
/* prototipos das funcoes */
void alocaespaco(char *linha[]);
void lelinhas (char *linha[]);
void imprimelinhas (char *linha[]);
void ordenalinhas (char *linha[]);
void main(void)
{
char *linha[LINHAS];
alocaespaco(linha);
lelinhas(linha);
imprimelinhas(linha);
ordenalinhas(linha);
imprimelinhas(linha);
}
/* Esta rotina aloca espaco para as linhas */
void alocaespaco(char *linha[]){
int i;
for (i=0; i<LINHAS; i++){
if (!(linha[i] = malloc(COLUNAS*sizeof(int)))){
printf("Nao consegui alocar o vetor %d.\n", i);
exit(i);
}
}
}
/* Esta rotina le linhas */
void lelinhas (char *linha[]){
int i;
for (i=0; i<LINHAS; i++){
printf("Entre com a linha %d.\n", i);
gets(linha[i]);
}
}
/* Esta rotina imprime as linhas */
void imprimelinhas (char *linha[]){
int i;
for (i=0; i<LINHAS; i++){
printf("Linha %d %s.\n", i, linha[i]);
}
}
void ordenalinhas( char *linha[]){
char trocou;
char *p;
int i;
do {
trocou = 0;
for (i=0; i<LINHAS-1; i++){
if (strcmp(linha[i], linha[i+1]) >0){
p = linha[i];
linha[i] = linha[i+1];
linha[i+1] = p;
trocou = 1;
}
}
} while (trocou);
}
bom aqui tem um pouquinho sobre o assunto quem poder colaborar com mais coisas vai ser bacana.