Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

341
Vistas
estrella vacía y & en C

Tengo problemas con el puntero en C, este es un ejemplo de hilo en C. Este código fue escrito en el libro "Programación avanzada de Linux":

 void* print_xs (void* unused) { while (1) fputc ('x', stderr); return NULL; }

y:

 int main() { pthread_t thread_id; pthread_create (&thread_id, NULL, &print_xs, NULL); while (1) fputc ('o', stderr); return 0; }
  1. ¿Por qué print_xs es void* ?

    Encontré una respuesta, pero no estaba lo suficientemente clara para mí. la respuesta: Esto declara un puntero, pero sin especificar a qué tipo de datos apunta

  2. ¿Está relacionado con el valor de retorno?

  3. también, ¿por qué se usa el tipo de datos void* para "sin usar" (void* sin usar)?

  4. No estoy seguro de por qué se usa "&" antes de print_xs en pthread_create. ¿Es correcto decir: pthread_create está en otra biblioteca y queremos decirle que ejecute la función pthread_create pero no sabe dónde está esta función, así que le decimos la dirección de esta función?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Un puntero vacío (void* ) es un puntero que no tiene ningún tipo de datos asociado. Un puntero vacío puede contener una dirección de cualquier tipo y se puede convertir a cualquier tipo.

Por ejemplo:

 int a = 10; char b = 'x'; void *unused = &a; // void pointer holds address of int 'a' unused = &b; // void pointer holds address of char 'b'

Sí, void* print_xs() tiene el tipo de retorno de puntero void.

En pthread_create (&thread_id, NULL, &print_xs, NULL); La función pthread_create pasa la dirección de thread_id y print_xs

over 4 years ago · Santiago Trujillo Denunciar

0

Tenga en cuenta que ' no es una comilla simple válida en C. Tenga cuidado al copiar y pegar.

1) print_xs() es una función de hilo y su tipo de devolución debe ser void* . Ver pthread_create() .

2) y 3) En absoluto. El hilo toma un void* como argumento. Por lo tanto, la definición de la función toma un void* . Pero no se usa (como dice su nombre).

4) El & antes de la función no es necesario. Pero tenerlo tampoco estaría de más. Ambos son equivalentes.

over 4 years ago · Santiago Trujillo Denunciar

0

1,2.) La función devuelve un puntero a un tipo de datos no especificado; eso significa que podría ser cualquier tipo de datos, y se espera que ya sepa qué hacer con ellos (cualquier tipo de conversión o desglose de la devolución en algo utilizable; la documentación debería poder informarle sobre lo que viene su camino).

3.) El parámetro no utilizado es un puntero a un tipo no especificado. Misma situación, solo que va en la dirección positiva.

4.) Las referencias son un poco más confusas para mí, pero si mi cerebro no me falla, básicamente dice "el objeto real al que thread_id es un puntero". La función llamada trabajará con ella como un objeto, en lugar de pasar por un puntero para acceder a ella.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda