1 – 14 de 14
Anônimo Glauco Pires disse...

Na compilação apresentou esta mensagem aviso: formato ‘%d’ espera argumento do tipo ‘int’, porém o argumento 2 possui tipo ‘int *’ [-Wformat] . Então nas linhas (ex) printf("Endereco na memoria: %p\n\n", &numero1); troquei '%d' por '%p'

12 de janeiro de 2014 às 08:24

Anônimo Rafael disse...

Muito bom o curso. Estou gostando bastante! Parabéns pela iniciativa e sucesso!

31 de julho de 2014 às 10:59

Anônimo Anônimo disse...

Um sucesso essa pagina!

20 de novembro de 2014 às 11:41

Anônimo rimaS disse...

Olá ! Aprimorei o código anterior:

// Ponteiros: incremento / decremento
#include < stdio.h >
#include < string.h >
#include < ctype.h >
#define DIM 8
#define DIM2 9
int a=10,b=23;
int *ptr_x = NULL;
void preenche_com_end_mem(int end_var, char j[DIM]); // protótipo de função
void mostra_pointer(int *ptr_x, char j, int end_ptr);
void tecle_anything(); // protótipo de função
main()
{
while(1)
{
system("cls || clear");
printf("PONTEIRO: variavel que armazena endereco de memoria de outra variavel.\n");
printf("INCREMENTO / DECREMENTO de Ponteiros:\n\n");
printf("Declaracoes de variaveis feitas nesse programa:\n");
printf("int a=%d, b=%d;\n",a,b);
printf("int *ptr_x = NULL;\n\n");
printf("Endereco de memoria da variavel (a) : &a = %d\n", &a);
printf("Endereco de memoria da variavel (b) : &b = %d\n", &b);
printf("Endereco de memoria do ponteiro (ptr_x): &ptr_x = %d\n\n", &ptr_x);
printf("Como o tipo (int) tem %d bytes de tamanho:\n",sizeof(int));
preenche_com_end_mem((int)&a,"(a)");
preenche_com_end_mem((int)&b,"(b)");
preenche_com_end_mem((int)&ptr_x, "(ptr_x)");
printf("\n\n");
tecle_anything();
printf("\rE agora, escrevendo: ptr_x = &a; ... como fica ?\n");
ptr_x = &a;
tecle_anything();
mostra_pointer(ptr_x, 'a',(int) &ptr_x);
tecle_anything();
printf("\rINCREMENTO de Ponteiro: instrucao ptr_x++; para onde apontara ptr_x agora?\n");
ptr_x++;
tecle_anything();
mostra_pointer(ptr_x, 'b',(int) &ptr_x);
tecle_anything();
printf("\rDECREMENTO de Ponteiro: instrucao ptr_x--; para onde apontara ptr_x agora?\n");
ptr_x--;
tecle_anything();
mostra_pointer(ptr_x, 'b',(int) &ptr_x);
system("pause");
}
}
// FUNÇÃO que mostra os endereços de memória usados por uma variável
void preenche_com_end_mem(int end_var, char j[DIM])
{
int v[sizeof(int)], i;
char tmp[DIM2];
v[0]=end_var;
for(i=1;i<=sizeof(int);i++)
{v[i]=v[i-1]+1;}
if (strcmp(j,"(ptr_x)")!=0)
strcpy(tmp,"Variavel");
else
strcpy(tmp,"Ponteiro");
printf("%s %-7s ocupa os enderecos: ",tmp,j);
for(i=0;i<sizeof(int);i++)
{printf("|%d| ",v[i]);}
printf("\n");
}
// FUNÇÃO Mostra as informações do Ponteiro
void mostra_pointer(int *ptr_x, char j, int end_ptr)
{
printf("\rConteudo do Ponteiro = endereco de memoria da variavel (%c): prt_x = %d\n", j, ptr_x);
printf("Conteudo da variavel apontada = variavel (%c): *prt_x = %d\n", j, *ptr_x);
printf("O Ponteiro tambem tem o seu proprio endereco: &prt_x = %d\n\n", end_ptr);
}
// FUNÇÃO
void tecle_anything()
{
printf("Digite qualquer tecla para continuar...");getch();
}

29 de janeiro de 2015 às 19:23

Anônimo rimaS disse...

Olá ! Rotina básica sobre ponteiros:

// apresentação de Ponteiros
#include < stdio.h >
int a;
int *ptr_a = NULL;
void tecle_anything(); // protótipo da função
main()
{
while(1)
{
system("cls || clear");
printf("PONTEIRO: variavel que armazena endereco de memoria de outra variavel.\n");
printf("BASICO:\n\n");
printf("Declaracoes de variaveis feitas nesse programa:\n");
printf("int a;\n");
printf("int *ptr_a = NULL;\n\n");
printf("Vamos atribuir um valor para a variavel (a): ");scanf("%d", &a);
printf("Variavel (a): %d\n", a);
printf("Endereco de memoria da variavel (a): &a = %d\n", &a);
tecle_anything();
printf("\rE agora, escrevendo: ptr_a = &a; ... como fica ?\n");
ptr_a = &a;
tecle_anything();
printf("\rConteudo do Ponteiro = endereco de memoria da variavel (a): prt_a = %d\n", ptr_a);
printf("Conteudo da variavel apontada = variavel (a): *prt_a = %d\n", *ptr_a);
printf("O Ponteiro tambem tem o seu proprio endereco: &prt_a = %d\n\n", &ptr_a);
tecle_anything();
printf("\rAlterando o valor da variavel (a), atraves do Ponteiro: digite um valor: "); scanf("%d", ptr_a);
printf("Observe que tudo fica igual, menos o valor da variavel (a) e *prt_a:\n");
tecle_anything();
printf("\rAplicando scanf(\"%%d\", ptr_a); ou a instrucao *ptr_a = %d, obtemos:\n", *ptr_a);
printf("Variavel (a): %d\n", a);
printf("Endereco de memoria da variavel (a): &a = %d\n", &a);
printf("Conteudo do Ponteiro = endereco de memoria da variavel (a): prt_a = %d\n", ptr_a);
printf("Conteudo da variavel apontada = variavel (a): *prt_a = %d\n", *ptr_a);
printf("O Ponteiro tambem tem o seu proprio endereco: &prt_a = %d\n\n\n", &ptr_a);
system("pause");
}
}
// função tecle_anything
void tecle_anything()
{
printf("Digite qualquer tecla para continuar...");getch();
}

29 de janeiro de 2015 às 19:25

Anônimo rimaS disse...

Olá ! Segue abaixo um programa simples, mas que ajuda a entender os ponteiros de ponteiros:

// Ponteiros de Ponteiros
#include < stdio.h >
int a;
int *ptr_a1 = NULL; // declaração do ponteiro da variável (a)
int **ptr_a2 = NULL; // declaração do ponteiro para o ponteiro da variável (a)
int ***ptr_a3 = NULL; // declaração do ponteiro para o ponteiro para o ponteiro da variável (a)
void tecle_anything(); // protótipo da função
main()
{
while(1)
{
system("cls || clear");
printf("PONTEIROS DE PONTEIROS: 3 niveis de Ponteiros\n");
printf("Observe como os (*) mudam o conteudo apontado pelos Ponteiros.\n");
printf("Nao ha um limite pre-determinado para o uso de niveis, atraves dos (*).\n\n");
printf("Declaracoes de variaveis feitas nesse programa:\n");
printf("int a;\n");
printf("int *ptr_a1 = NULL;\n");
printf("int **ptr_a2 = NULL;\n");
printf("int ***ptr_a3 = NULL;\n");
printf("Vamos atribuir um valor para a variavel (a): ");scanf("%d", &a);
printf("Variavel (a): %d\n", a);
printf("Endereco de memoria da variavel (a): &a = %d\n", &a);
tecle_anything();
printf("\rE agora, escrevendo: ptr_a1 = &a; ... como fica ?\n");
ptr_a1 = &a; // // ponteiro para a variável (a)
tecle_anything();
printf("\nPRIMEIRO NIVEL DE PONTEIRO:\n");
printf("\rConteudo do Ponteiro = endereco de memoria da variavel (a): ptr_a1 = %d\n", ptr_a1);
printf("Conteudo da variavel apontada = variavel (a): *ptr_a1 = %d\n", *ptr_a1);
printf("O Ponteiro tambem tem o seu proprio endereco: &ptr_a1 = %d\n\n", &ptr_a1);
tecle_anything();
printf("\rE agora, escrevendo: ptr_a2 = &ptr_a1; ... como fica ?\n");
ptr_a2 = &ptr_a1; // // ponteiro para ponteiro para a variável (a)
tecle_anything();
printf("\nSEGUNDO NIVEL DE PONTEIRO:\n");
printf("\rConteudo do Ponteiro = endereco de memoria do Ponteiro ptr_a1: ptr_a2 = %d\n", ptr_a2);
printf("Observe o conteudo que \x82 apontado pelo Ponteiro = *ptr_a2 = %d\n", *ptr_a2);
printf("Observe o conteudo que \x82 apontado pelo Ponteiro = **ptr_a2 = %d\n", **ptr_a2);
printf("O Ponteiro tambem tem o seu proprio endereco: &ptr_a2 = %d\n\n", &ptr_a2);
tecle_anything();
printf("\rE agora, escrevendo: ptr_a3 = &ptr_a2; ... como fica ?\n");
ptr_a3 = &ptr_a2; // // ponteiro para ponteiro para ponteiro para a variável (a)
tecle_anything();
printf("\nTERCEIRO NIVEL DE PONTEIRO:\n");
printf("\rConteudo do Ponteiro = endereco de memoria do Ponteiro ptr_a2: ptr_a3 = %d\n", ptr_a3);
printf("Observe o conteudo que \x82 apontado pelo Ponteiro = *ptr_a3 = %d\n", *ptr_a3);
printf("Observe o conteudo que \x82 apontado pelo Ponteiro = **ptr_a3 = %d\n", **ptr_a3);
printf("Observe o conteudo que \x82 apontado pelo Ponteiro = ***ptr_a3 = %d\n", ***ptr_a3);
printf("O Ponteiro tambem tem o seu proprio endereco: &ptr_a3 = %d\n\n", &ptr_a3);
system("pause");
}
}
// função tecle_anything
void tecle_anything()
{
printf("Digite qualquer tecla para continuar...");getch();
printf("\r \r");
}

30 de janeiro de 2015 às 07:10

Anônimo Anônimo disse...

Ótimo artigo!

23 de junho de 2015 às 07:29

Anônimo Anônimo disse...

E quem é Rimass no jogo do bixo???

15 de outubro de 2015 às 18:36

Blogger Christopher disse...

Olá!
Muito bom esse curso. Uma dica remova o & antes das variáveis na função printf, pois este operador não é necessário ali. Abs!

25 de abril de 2016 às 05:05

Blogger Elizabeth Queiroz disse...

Christopher, ele está dando printf no endereço, e não no valor. Quando se usa o & antes do nome da variável estamos falando do endereço dela. Deu pra ver que você não leu ou não entendeu.

19 de dezembro de 2016 às 16:20

Anônimo Matheus disse...

ótima didática ! Parabéns pela abordagem e exemplos de um assunto tão importante que é ponteiros

1 de maio de 2017 às 17:43

Blogger Paulo Ricardo disse...

Muito esse curso...explicações excelentes...muito didático...conciso, preciso, muito bom mesmo.

2 de maio de 2017 às 16:27

Blogger Unknown disse...

Quando rodei aqui, o código me retornou isso:

numero1:
Valor: 1
Endereco na memoria: 588443648

numero2:
Valor: 2
Endereco na memoria: 588443652

letra1:
Valor: a
Endereco na memoria: 588443646

letra2:
Valor: b
Endereco na memoria: 588443647

Alterando os valores...


o Endereço na memoria está me retornando "Lixo", certo?

13 de novembro de 2018 às 15:10

Blogger Unknown disse...

Ótima explicação!

7 de fevereiro de 2019 às 05:52

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.
Você pode usar algumas tags HTML, como <b>, <i>, <a>

A moderação de comentários foi ativada. Todos os comentários devem ser aprovados pelo autor do blog.

Depois de enviar seu comentário, será necessário fazer login.
Prove que você não é um robô