2011-06-20 21 views
10

Se define en /usr/include/stdint.h:¿Qué es intptr_t, es un tipo para entero o puntero?

typedef long int    intptr_t; 

se supone que debe ser un tipo de número entero o un puntero?

+0

@Chris Lutz, ¿cómo? 'man intptr_t' no aparece nada. –

+1

Creo que hay una página de manual para 'stdint.h'. Y siempre está Google. –

Respuesta

21

Es un tipo entero con signo que es lo suficientemente grande como para contener un puntero.

+3

Vale la pena señalar que la parte del puntero de espera mide que probablemente tendrá un tamaño diferente en las plataformas de 32 y 64 bits ... – Goz

+1

puntero s/a/cualquier puntero/ – ninjalj

+0

Sólo por curiosidad: ¿por qué es necesario tener una versión firmada y sin firmar de [u] intptr_t? – JohnTortugo

1

Es un tipo entero con signo que garantiza que puede contener un tipo void*.

¿Y por qué también hay [u]intptr_t? Porque:

Cualquier puntero válido para anular se puede convertir en intptr_t o uintptr_t y volver sin ningún cambio en el valor. El estándar de C garantiza que un puntero a vacío se puede convertir desde o hacia un puntero a cualquier tipo de objeto y viceversa y que el resultado debe ser igual al puntero original. En consecuencia, se permite convertir directamente desde un puntero char * a uintptr_t en las implementaciones que admiten el uintptr_t.

+0

¿De dónde es esto citado? – Yotam

+1

Me tienes. Aquí: https://www.securecoding.cert.org/confluence/display/c/INT36-C.+Converting+a+pointer+to+integer+or+integer+to+pointer –

Cuestiones relacionadas