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

607
Vistas
¿Cuál es la definición de ++p donde p es const char *p en C?

Si necesito iterar sobre una matriz en C, puedo hacer algo como:

 void uselessTest(const char *p) { while(*p) { ++p; } }

Me pregunto qué significa eso en detalle:

  • ¿Prueba, en cada ciclo, if (*p != null) ?
  • Si p = p + 1 , ¿qué significa eso? ¿Pa es un valor numérico? *p debe ser el valor señalado y p la dirección del puntero? Entonces, en este ciclo, p cambia mientras que *p permanece igual.
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

¿Prueba, en cada ciclo, si (*p != null) ?

Diría que es más correcto decir que comprueba si *p!=0 .

Si p = p + 1, ¿qué significa eso? ¿Pa es un valor numérico?

Parece que el estándar C no define qué puntero es internamente. Pero en el siguiente ejemplo, supondré que p tiene una dirección representada como un número entero (que suele ser el caso). En ese caso, en su ejemplo anterior, cuando le agrega uno, p se mueve a la siguiente dirección, por ejemplo, si p fuera 0x1000, después del incremento se convertiría en 0x1001 (Esto se debe a que el tamaño del char es 1, en caso de que p fuera puntero a int se movería cuatro bytes hacia adelante * -el tamaño dado del entero es cuatro).

Entonces, en este ciclo, p cambia mientras que *p permanece igual.

No, de hecho *p intenta desreferenciar p , en otras palabras, obtener contenidos del objeto almacenado en la dirección p . Entonces, por supuesto, si cambia el valor de p , también puede obtener contenido diferente en la nueva dirección. por ejemplo, si el valor inicial de p era 0x1000, después del incremento, será 0x1001 y *p intentará leer el valor en 0x1001, que podría ser diferente del valor almacenado en 0x1000.

* Busque aritmética de punteros para obtener más detalles al respecto

over 4 years ago · Santiago Trujillo Denunciar

0

Comprueba en cada iteración si *p != null) y finaliza el ciclo si es nulo.

Aumenta el puntero, ergo, el puntero apunta a la siguiente dirección. Entonces, al usar un ciclo como este, puede iterar sobre los elementos en una matriz.

Entonces, básicamente, lo que hace este ciclo: itera sobre los caracteres en la matriz, hasta que alcanza un carácter \0 de terminación. En cada iteración, el puntero p se incrementa para apuntar al siguiente carácter.

over 4 years ago · Santiago Trujillo Denunciar

0

¿Prueba, en cada ciclo, si (*p != null) ?

No hay un null en C. Hay un terminador NUL ( '\0' ) y NULL . Este último está asociado con punteros.

el cheque es

 if (*p != 0)

que es lo mismo que

 if (*p != '\0')

Si p = p + 1, ¿qué significa eso?

Mueve el puntero sizeof(*p) bytes hacia adelante.

¿Pa es un valor numérico?

p es un const char* , o en otras palabras, un puntero a char .

*p debe ser el valor señalado y p la dirección del puntero?

*p son los datos a los que apunta el puntero p y p es la dirección a la que apunta el puntero (que es diferente de la dirección de p )

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