Aritmética do ponteiro com saída errada [duplicado]
Esta pergunta já tem uma resposta aqui:
Aritmética de ponteiro em C 2 respostasNo programa a seguir, aquiptr
Foi declarado como um ponteiro para um ponteiro inteiro e atribuído o endereço base da matrizp[]
, que foi declarado como uma matriz de ponteiro inteiro. Suponhaptr
contém o endereço9016
(suponha que o endereço inicial de p seja 9016) antes deptr
é incrementado e depoisptr++
, ele conterá o valor 9020 (suponha que int use 4 bytes).
assimptr-p
deve dar a saída como 4, ou seja (9020-9016 = 4). Mas está dando saída como 1. porque?
#include<stdio.h>
int main()
{
static int a[]={0,1,2,3,4};
static int *p[]={a,a+1,a+2,a+3,a+4};
int **ptr=p;
ptr++;
printf("%d",ptr-p);
return 0;
}