aritmetica com ponteiros (incremento)

1. aritmetica com ponteiros (incremento)

Daniel
danielcrvg

(usa Slackware)

Enviado em 14/01/2015 - 15:18h

Ola pessoal estou dando uma olhada em aritmetica em ponteiros, mais precisamente sobre o incremento deles..

Vi em 2 livros que existe 2 formas de se incrementar um ponteiro:

- Por elemento que ele aponta(caso um array)
- Por tipo de dado que ele aponta.

Ai fiz o codigo abaixo para ver na pratica como isso é feito, gostaria de saber se é isto mesmo ou se alguem tem mais alguma coisa a complementar:


#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main() {

char *nome = "daniel";
int i = 0;
int *pi = &i;

/* Incremento por posicao*/
printf("Imprimindo array incrementando o ponteiro:\n");
for (i=0; i<strlen(nome);i++) {
printf("Caracter: %c | Endereco: %p , %d\n",*(nome+i),(nome+i),(nome+i));
}
/* Incremento por tipo de dado*/
printf("\nNumero: %d | Endereco: %p , %d\n",i,&i,&i);
printf("\nConteudo apontado pelo ponteiro: %d \nEnd para onde o ponteiro aponta: %p %d\n",*pi,pi,pi);

printf("\nIncrementando o ponteiro pelo tipo\n");
printf("%d , %d <-- Moveu %d bytes por que um int tem: %d bytes\n",i+1,(int)(pi+1),(int)(pi+1)-(int)(pi),sizeof(int));

return 0;
}



  


2. %d?

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 15/01/2015 - 13:52h

Olá Daniel,

Tudo certo, só não entendi o porque de você imprimir enderecos usando o '%d'...

Incremento de ponteiros sempre serão de acordo com o tipo de dados para o qual eles apontam. Se for um ponteiro int, 4 em 4 (em sistemas onde o int tem 4 bytes), char 1 byte, etc...

Qualquer coisa posta denovo,
Enzo Ferber
[]'s


EDIT: Quando você incrementa um ponteiro através do seu valor, você está incrementando (*p)++, ou seja, se ele aponta para um int e esse int tem valor 10, depois da operacao esse int valerá 11. Você não mudou o endereco.

Já por endereco, aí sim é pelo tipo de dados apontado. Se p == 0x004 e typeof(p) for int, então p++ == 0x008.


3. Re: aritmetica com ponteiros (incremento)

Daniel
danielcrvg

(usa Slackware)

Enviado em 15/01/2015 - 14:33h

eu imprimi com %d so pra ficar visivelmente melhor para eu fazer a conta de cabeça rsrs mas eu coloquei como %p antes..









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts