2010-11-07 19 views
7

Duplicar posibles:
What's the difference between a null pointer and a void pointer?¿Cuál es la diferencia entre un puntero de vacío y un puntero NULL?

¿Cuál es la diferencia entre un puntero para anular y un puntero NULL en C? ¿O son lo mismo?

+1

Duplicado exacto de [¿Cuál es la diferencia entre un puntero nulo y un puntero de vacío?] (Http://stackoverflow.com/questions/3581585/whats-the-difference-between-a-null-pointer-and-a-void -puntero). Utilice la búsqueda antes de publicar preguntas. – qrdl

Respuesta

7

void es un tipo de datos. void* es solo un puntero a un tipo indefinido. Se puede establecer un void* en cualquier ubicación de memoria. Un puntero NULL es cualquier puntero que se establece en NULL (0).

Así que sí, son diferentes, porque un puntero void es un tipo de datos, y un puntero NULL se refiere a cualquier puntero que se establece en NULL.

5

Puntero a void es un puntero a un tipo no especificado. Es decir. Solo un puntero. Todavía puede ser un puntero válido, pero no sabemos a qué apunta (por ejemplo, una función puede tomar un puntero vacío como parámetro y luego interpretar el tipo de acuerdo con un parámetro diferente)

NULL es un puntero "vacío". No válido, se puede usar para especificar un puntero a nada/no establecido. Es un valor mientras que el vacío es un tipo.

13

En C, hay void, void puntero y NULL puntero.

  1. void es ausencia de tipo. ES DECIR. una función que devuelve un tipo void es una función que no devuelve nada.
  2. void puntero: es un puntero a una ubicación de memoria cuyo tipo puede ser cualquier cosa: una estructura, un int, un flotador, lo que sea.
  3. Un puntero NULL es un puntero a la ubicación 0x00, es decir, no hay ubicación. Apuntando a nada

Ejemplos:

void función:

void printHello() 
{ 
    printf("Hello"); 
} 

void puntero:

void *malloc(size_t si) 
{ 
    // malloc is a function that could return a pointer to anything 
} 

NULL puntero:

char *s = NULL; 
// s pointer points to nowhere (nothing) 
Cuestiones relacionadas