Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

222
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda