Espacios de nombres
Variantes
Acciones

ptrdiff_t

De cppreference.com
< c‎ | types
Definido en la cabecera <stddef.h>
typedef /* definido en implementación*/ ptrdiff_t;

ptrdiff_t es el tipo de entero con signo del resultado de restar dos punteros.

[editar] Observaciones

ptrdiff_t se utiliza para la aritmética de punteros y la indexación de matrices, solo si son posibles valores negativos. Los programas que utilizan otros tipos, como int, pueden fallar, por ejemplo en los sistemas de 64 bits cuando el índice supera INT_MAX o si se basa en la aritmética modular de 32 bits.

Sólo los punteros a elementos de la misma matriz (incluyendo el puntero que está más allá del final de la matriz) pueden ser restados uno del otro.

Si una matriz es tan grande (mayor que los elementos PTRDIFF_MAX, pero menor que los bytes SIZE_MAX), que la diferencia entre dos punteros puede no ser representable como ptrdiff_t, por ello el resultado de restar dos de esos punteros es indefinido.

Para matrices de caracteres más cortos que PTRDIFF_MAX, ptrdiff_t actúa como la contraparte con signo de size_t: puede almacenar el tamaño de la matriz de cualquier tipo y es, en la mayoría de las plataformas, sinónimo de intptr_t).

[editar] Ejemplo

#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
 
int main(void)
{
    const size_t N = 100;
    int numbers[N];
 
    printf("PTRDIFF_MAX = %ld\n", PTRDIFF_MAX);
    int *p1=&numbers[18], *p2=&numbers[23];
    ptrdiff_t diff = p2-p1;
    printf("p2-p1 = %td\n", diff);
 
    return 0;
}

Posible salida:

PTRDIFF_MAX = 9223372036854775807
p2-p1 = 5

[editar] Véase también

tipo entero sin signo devuelto por el operador sizeof
Original:
unsigned integer type returned by the sizeof operator
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(typedef) [editar]
byte offset from the beginning of a struct type to specified member
(macro de función) [editar]
Documentación de C++ para ptrdiff_t