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

326
Visualizações
¿Por qué no es un error incrementar la matriz "a" en la siguiente función?
#include<stdio.h> void printd(char []); int main(void){ char a[100]; a[0]='a';a[1]='b';a[2]='c';a[4]='d'; printd(a); return 0; } void printd(char a[]){ a++; printf("%c",*a); a++; printf("%c",*a); }

Explicación: Esperaba que resultara en un error de lvalue. Pero está funcionando sin ningún error y dando bc como salida. ¿Por qué esta matriz incremental "a" no es un error?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Si una matriz se pasa a una función, decae en un puntero al primer elemento de la matriz.

Debido a esto dentro de printd() el puntero a puede incrementarse y disminuirse, para apuntar a diferentes elementos de la matriz a como se define en main() .

Tenga en cuenta que al declarar/definir la lista de parámetros de una función para cualquier tipo T , la expresión T[] es equivalente a T* .

En el caso específico de la pregunta

 void printd(char a[]);

es lo mismo que

 void printd(char * a);

El siguiente código muestra un comportamiento equivalente al código del OP, con pa comportándose como a lado printd() :

 #include <stdio.h> int main(void) { char a[100]; a[0]='a';a[1]='b';a[2]='c';a[4]='d'; { char * pa = a; pa++; printf("%c", *pa); pa++; printf("%c", *pa); } return 0; `}
over 4 years ago · Santiago Trujillo Relatório

0

En lenguaje C, la declaración de matriz en la lista de parámetros de función y la declaración de matriz fuera de la lista de parámetros de función significan cosas completamente diferentes, aunque parezcan similares (o iguales) en la superficie.

Cuando usa la declaración de matriz en la lista de parámetros de funciones (como es el caso con void printd(char a[]) en su código), no está declarando una matriz. La sintaxis de nivel superior [] en la lista de parámetros de función es solo una forma alternativa de declaración de puntero . Esto significa que su parámetro a se declara realmente como char *a . No es una matriz en absoluto, es un puntero ordinario. No hay nada inusual en poder incrementar a , y es por eso que no obtiene ningún "error de valor l".

Mientras tanto, su a en main es una verdadera matriz.

over 4 years ago · Santiago Trujillo Relatório

0

¿Por qué esta matriz incremental "a" no es un error?

En C, las matrices se pasan como un puntero a cualquier función. Por eso no te da error.

Las llamadas de función en main() pasan el nombre de la matriz, a , como argumento porque el nombre de una matriz en una expresión se evalúa como un puntero a la matriz . En otras palabras, la expresión, a , es un puntero a (el primer elemento de) la matriz, a[] . Su tipo es, por lo tanto, char * , y una función llamada usa este puntero (pasado como argumento) para acceder indirectamente a los elementos de la matriz.

Ahora, al recibir la dirección del primer elemento de a , a++ significa adelantar la dirección inicial de la matriz en 1 . Es por eso que el primer printf imprime b , el segundo elemento de la matriz a .

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