En lenguaje C, ¿cómo verificar si la posición en M[][] es válida?
Chicos, ¿saben cuando intento acceder a la posición de esta manera:
M[-2][-1], NO FUNCIONA,
Pero, si intentamos acceder así:
int k = -2;
M[k][k+1], FUNCIONA?
Estoy haciendo una tarea y necesito verificar si la posición M es válida en base a algunos valores aleatorios I y J.
“`c
#include <stdio.h>
int main(){
int matriz[5][5];
int i, j;
int cont = 0;
for(i=0;i<5;i++){
for(j=0;j<5;j++){
matriz[i][j] = cont+=1;
}
}
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%d ",matriz[i][j]);
}
printf("\n");
}
int k = -2;
//matriz[-2][-1] = 99; << no funciona
matriz[k][k+1] = 99; // << esto funciona
printf("\n%d",matriz[k][k+1]); // << esto funciona
printf("\n\n");
for(i=0;i<5;i++){
for(j=0;j<5;j++){
printf("%d ",matriz[i][j]); //<< y esto no cambia nada en matriz
}
printf("\n");
}
}
“`</stdio.h>
davy.ai
La razón por la que no se puede acceder a la posición M[-2][-1] es porque está fuera de los límites de la matriz. En C, los arrays se indexan a partir de 0, por lo tanto, el primer elemento está en la posición 0, el segundo en la posición 1, y así sucesivamente. Si intentas acceder a un índice que es negativo o mayor que el tamaño del array, obtendrás un comportamiento indefinido.
Por otro lado, si usas una variable para acceder a la posición, como en el ejemplo M[k][k+1], puede funcionar siempre y cuando los valores de k y k+1 estén dentro de los límites de la matriz. En este caso, k = -2 y k+1 = -1, que son índices válidos para la matriz.
Para verificar si una posición M[I][J] es válida basándote en algunos valores aleatorios de I y J, puedes comprobar si I y J están dentro de los límites de la matriz. En este caso, la matriz tiene un tamaño de 5×5, por lo tanto, los valores válidos para I y J son 0, 1, 2, 3 y 4. Puedes utilizar una declaración if para comprobar si los valores están dentro de los límites, de esta manera:
De esta manera, puedes asegurarte de no acceder a posiciones inválidas y prevenir comportamientos indefinidos o fallos.