Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

610
Views
¿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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!