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

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

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 Report

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 Report

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 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!