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

220
Views
Punteros y matrices en C, necesidad de mayor comprensión

Estaba practicando algunos punteros y matrices en C y noté que mis cuatro métodos arrojaron la misma respuesta. Mi pregunta es, ¿hay desventajas al usar cualquiera de mis métodos a continuación? Estoy asombrado de cómo estos cuatro me dan el mismo resultado. Me acabo de dar cuenta de que puede usar un puntero como si fuera una matriz y también puede usar una matriz como si fuera un puntero.

 char *name = "Madonah"; int i= 0; for (i=0;i<7; i++){ printf("%c", *(name+i)); } char name1 [7] = "Madonah"; printf("\n"); int j= 0; for (j=0;j<7; j++){ printf("%c", name1[j]); } char *name2 = "Madonah"; printf("\n"); int k= 0; for (k=0;k<7; k++){ printf("%c", name2[k]); } char name3 [7] = "Madonah"; printf("\n"); int m= 0; for (m=0;m<7; m++){ printf("%c", *(name+m)); }

Resultados:

 Madonah Madonah Madonah Madonah
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Es cierto que los punteros y las matrices son equivalentes en algún contexto, "equivalente" no significa que sean idénticos ni siquiera intercambiables . Las matrices no son punteros .
Es la aritmética de punteros y la indexación de matrices las que son equivalentes, los punteros y las matrices son diferentes .

cual es preferible y las ventajas/desventajas?

Depende de cómo quieras usarlos. Si no desea modificar la cadena, puede usar

 char *name = "Madonah";

Es básicamente equivalente a

 char const *name = "Madonah";

*(name + i) y name[i] ambos son iguales. Prefiero name[i] sobre *(name + i) ya que es ordenado y lo usan con más frecuencia los programadores de C y C++.

Si desea modificar la cadena, puede ir con

 char name1[] = "Madonah";
over 4 years ago · Santiago Trujillo Report

0

En C, a[b] , b[a] , *(a+b) son equivalentes y no hay diferencia entre estos 3. Entonces solo tienes 2 casos:

 char *name = "Madonah"; /* case 1 */

y

 char name3 [7] = "Madonah"; /* case 2 */

El primero es un puntero que apunta a un literal de cadena. Este último es una matriz de 7 caracteres.

cuál se prefiere depende de su uso de name3 .

Si no tiene la intención de modificar la cadena, puede usar (1) y también lo haría const char* para dejarlo claro y garantizar que el literal de la cadena no se modifique accidentalmente. La modificación del literal de cadena es un comportamiento indefinido en C

Si necesita modificarlo, debe usar (2) ya que es una matriz de caracteres que puede modificar. Una cosa a tener en cuenta es que en el caso (2), ha especificado explícitamente el tamaño de la matriz como 7 . Eso significa que la matriz de caracteres name3 no tiene un terminador nulo ( \0 ) al final. Por lo tanto, no se puede usar como una cadena . Preferiría no especificar el tamaño de la matriz y dejar que el compilador lo calcule:

 char name3 [] = "Madonah"; /* case 2 */ /* an array of 8 characters */
over 4 years ago · Santiago Trujillo Report

0

Además de lo que otros dijeron, agregaré una imagen para una mejor ilustración. Si usted tiene

 char a[] = "hello"; char *p = "world";

Lo que sucede en el primer caso es que se asigna suficiente memoria para a (6 caracteres) en la pila, y la cadena "hola" se copia en la memoria que comienza en a . Por lo tanto, puede modificar esta región de memoria.

En el segundo caso, "mundo" se asigna en otro lugar (generalmente en una región de solo lectura), y se devuelve un puntero a esa memoria que simplemente se almacena en p . No puede modificar el literal de cadena en este caso a través de p .

Así es como se ve:

ingrese la descripción de la imagen aquí

Pero para su pregunta, apéguese a la notación, que es más fácil, prefiero [] . Más información sobre la relación entre matrices y punteros está aquí .

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!