valor máximo en la matriz C

Recibo errores de comstackción que realmente no puedo solucionar. Necesito crear un progtwig que inicialice una matriz, luego escribir una función más grande que tome 2 parámetros, una matriz y su longitud y devuelva el índice del elemento más grande de la matriz. Entonces llamaré a esta función desde main. ¿Alguien puede decirme cuál es el problema?

errors:part1.c: part1.c: In function 'main': part1.c:6:3: warning: implicit declaration of function 'largest' part1.c:7:23: error: expected expression before ']' token part1.c: In function 'largest': part1.c:17:4: warning: statement with no effect 

¡Gracias!

 #include  int main() { int myArray[]={1,2,3,4,5,6}; largest(myArray,6); printf("%d",myArray[]); return 0; } int largest(int array[], int length) { length = sizeof(array)/sizeof(array[0]); int i = 1; int max = array[0]; for(i; i<length; i++) { if(max < array[i]) { max = array[i]; } } return max; } 

C comstack tu código en una sola pasada. Esto significa que todo debe definirse antes de ser utilizado. Su función largest se define después de su uso, por lo tanto, una vez que el comstackdor ve

 largest(myArray,6); 

¡Todavía no se sabe que existe largest !

La solución sería mover la definición de largest encima de main , o mejor, declarar hacia adelante la función:

 #include  int largest(int array[], int length); int main() { int myArray[]={1,2,3,4,5,6}; largest(myArray,6); printf("%d",myArray[]); return 0; } int largest(int array[], int length) { /* implementation of largest */ } 

Además, sizeof(array) no le dará el número de elementos largest porque esa información se pierde en la llamada de función. Podría mover esa expresión hacia arriba en la llamada a la función para calcular y pasar el parámetro de longitud:

 largest(myArray,sizeof(myArray)/sizeof(myArray[0])); 

Esto también puede ser un error tipográfico, pero probablemente quiso almacenar e imprimir el valor máximo:

 int max = largest(myArray,sizeof(myArray)/sizeof(myArray[0])); printf("%d\n",max); 

NÚMERO 1

Usas la largest() en main() antes de definirla. Use un prototipo, o mueva la definición arriba de main() .

NÚMERO 2

En:

 length = sizeof(array)/sizeof(array[0]); 

Declara longitud como int length , pero asigne algo de tipo size_t . Eso causó el error de error: 'length' redeclared as different kind of symbol en la versión original de su pregunta.

NÚMERO 3

En

 for(i; i 

no le asignas un valor a i. Querías decir

 for(i=0; i 

? Aunque anteriormente asignó un valor a i , creo que esto está provocando una warning: statement with no effect (aunque es difícil estar seguro sin los números de línea en el código provisto).

Además, las matrices en C están basadas en 0. Probablemente desee inicializar i en 0 en lugar de 1.

NÚMERO 4

En la linea

 printf("%d",myArray[]); 

utiliza% d como especificador de formato, lo que significa que se espera que el argumento proporcionado sea un valor entero. Usted suministra una matriz en su lugar.

Coloque una statement de la largest() antes de main() para resolver la advertencia de statement implícita :

 int largest(int array*, int length); int main() 

El error de error: la expresión esperada antes del token ‘]’ está causada por:

 printf("%d",myArray[]); 

Para imprimir el valor más grande, necesita almacenar el resultado de la largest() o usarlo como un argumento para printf() :

 printf("%d", largest(myArray, 6)); 

Esto no es lo que esperas:

 length = sizeof(array)/sizeof(array[0]); 

como matrices decae a los punteros cuando se pasa como argumentos. Es equivalente a:

 length = sizeof(int*)/sizeof(int); 

Solo usa el argumento de length para controlar la iteración. Recomendamos hacer los argumentos a la largest() const ya que la función no los modifica.


La advertencia: statement sin efecto es causada por la i; en el for

 for(i; i 

cambiar a:

 for(; i 

o:

 for(i = 0; i 

o si C99:

 for(int i = 0; i 

También podría simplemente mover la definición de mayor () por encima de la definición de principal () y funcionaría.

Muchas personas han señalado muchos problemas, pero sorprenden a nadie que haya mencionado esto:

 int largest(int array[], int length) { length = sizeof(array)/sizeof(array[0]); 

No, sizeof no hace lo que parece pensar que hace aquí. No sabe mágicamente el tamaño de sus asignaciones, solo toma el tamaño del tipo subyacente. Lo que has hecho es equivalente a sizeof(int*)/sizeof(int) .

Debes confiar en el parámetro de longitud que te dio la persona que llama. No hay forma de obtener el tamaño real de la matriz utilizando sizeof , solo deje que la persona que llama le diga qué tan grande es.

Tiene un error y advertencias … el error es claramente más importante.

  printf("%d",myArray[]); 

La especificación de formato %d implica que desea escribir un valor int , este no es el caso y la causa probable de su error.

Hay otras advertencias que merecen su atención, como no proporcionar un prototipo de función para su función ‘más grande’, etc., pero son secundarias para corregir el error que impide la comstackción.

Por supuesto, las advertencias también deben eliminarse, o debe tomarse una decisión consciente para ignorarlas después de examinarlas.