Enviado em 27/05/2014 - 09:29h
Bom dia a todos.#include <stdio.h> int main(){ char vogais[]={'a','e','i','o','u'}; char *p_vogais; char **p_Pvogais; register int i; int tamanho; p_vogais = vogais; p_Pvogais = &p_vogais; tamanho = sizeof(vogais); /* Usando o vetor para apresentar os valores na tela */ for(i = 0; i < tamanho ; i++) printf("%c ", vogais[i]); printf("\n\n"); /* Usando o ponteiro que aponta para o vetor vogais para * apresentar valores na tela */ for(i = 0; i < tamanho ; i++) printf("%c ", *(p_vogais + i)); printf("\n\n"); /* Usando o ponteiro para o ponteiro para apresentar os * valores na tela */ for(i = 0; i < tamanho ; i++) printf("%c ", **(p_Pvogais + i)); return 0; }
a e i o u a e i o u Falha de segmentação
Enviado em 29/05/2014 - 15:34h
Sempre que o assunto é ponteiros, eu fico com vontade de escrever uma aula. Só que falta tempo (além de organização mental para me expressar com a devida clareza e se modo sucinto).void swap(int *a, int *b){ int c=*a; *a=*b; *b=c; } int main(void){ int i=0, j=1; swap(&i, &j); /* Passa (cópias de) os endereços de i e de j. */ return i; /* Programa termina com status 1 (i==1). */ }
long strtol(const char *str, char **endptr, int base)
#include <stdlib.h> #include <stdio.h> const char *strings[]={ "12345", "987xxx321", "", "0", " ", "\t -54321 \t", NULL }; int main(void){ const char **p_number; char *eon; /* end of number -- ponteiro para um caráter. */ long n; for(p_number=strings; *p_number!=NULL; p_number++){ n=strtol(*p_number, &eon, 10); if(**p_number){ /* primeiro caráter de *p_number não é nulo. */ if(!*eon) /* caráter contido no endereço eon é nulo. */ printf( "A conversão de \"%s\" para inteiro consumiu todos os " "caracteres e obteve o valor %ld.\n", *p_number, n ); else printf( "A conversão de \"%s\" para inteiro parou após encontrar " "o caráter inesperado '%c'. O valor da conversão parcial " "é %ld.\n", *p_number, *eon, n ); } else printf( "A conversão de \"%s\" para inteiro não foi realizada porque " "trata-se de uma string vazia. Se usado, o valor de n seria " "%ld.\n", *p_number, n ); } return 0; }
Enviado em 27/05/2014 - 16:02h
Tirando os parênteses tive a seguinte saída:a e i o u a b c d e a b c d e
Enviado em 27/05/2014 - 16:10h
Consegui um resultado satisfatório:#include <stdio.h> int main(){ char vogais[]={'a','e','i','o','u'}; char *p_vogais; char **p_Pvogais; register int i; int tamanho; p_vogais = vogais; p_Pvogais = &p_vogais; tamanho = sizeof(vogais); /* Usando o vetor para apresentar os valores na tela */ for(i = 0; i < tamanho ; i++) printf("%c ", vogais[i]); printf("\n\n"); /* Usando o ponteiro que aponta para o vetor vogais para * apresentar valores na tela */ for(i = 0; i < tamanho ; i++) printf("%c ", *(p_vogais + i)); printf("\n\n"); /* Usando o ponteiro para o ponteiro para apresentar os * valores na tela */ for(i = 0; i < tamanho ; i++) printf("%c ", *(*p_Pvogais + i)); return 0; }
Ao invés de ficar assim printf("%c ", **(p_Pvogais + i)), o correto é assim: printf("%c ", *(*p_Pvogais + i))
int a; int *pa; int **p_pa; pa = &a; p_pa = &pa; printf("%d %d %d", a, *pa, **p_pa);
Enviado em 27/05/2014 - 17:42h
Além disso, seu código só está dando certo por coincidência. A não ser que seja proposital.Enviado em 27/05/2014 - 21:37h
Se resolveu seu problema, lembre-se de marcar como resolvido.Enviado em 28/05/2014 - 07:59h
Enviado em 28/05/2014 - 09:14h
O mesmo programa com mudança no vetor: mudei de caractere para inteiro:/* Objetivo do programa: Apresentar os valores do vetor num, usando colchetes, * usando ponteiro e usando ponteiro para ponteiro */ #include <stdio.h> int main(){ int num[5]={1, 2, 3, 4, 5}; int *p_num; int **p_Pnum; register int i; p_num = num; p_Pnum = &p_num; /* Usando o vetor para apresentar os valores na tela */ for(i = 0; i < 5 ; i++) printf("%d ", num[i]); printf("\n\n"); /* Usando o ponteiro que aponta para o vetor vogais para * apresentar valores na tela */ for(i = 0; i < 5 ; i++) printf("%d ", *(p_num + i)); printf("\n\n"); /* Usando o ponteiro para o ponteiro para apresentar os * valores na tela */ for(i = 0; i < 5 ; i++) printf("%d ", *(*p_Pnum + i)); return 0; }
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5
printf("%d ", *(*p_Pnum + i))
Enviado em 29/05/2014 - 23:18h
Agora consegui entender o porquê dos ponteiros para ponteiros!Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Problemas com adaptadores wifi no Zorin (0)
instalar o Linux em computadores Acer novos (6)
Ocomon 6.0.1 - Problemas ao editar configurações estendidas (5)