es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El valor subíndice no es un array, puntero o vector en C.

Todos, soy nuevo en C, estoy intentando construir un programa para calcular la matriz, aquí está mi código fuente:

#include <stdio.h>
#include <stdlib.h>

void f1(double *p, double *n, double *m, int qntF, int qntS) {
    int i, j;

    for(i = 0; i < qntF; i++) {
        for(j = 0; j < qntS; j++) {
            m[i*qntS + j] = p[i*qntS + j] + n[i*qntS + j];
        }
    }

    for(i = 0; i < qntF; i++) {
        for(j = 0; j < qntS; j++) {
            printf("%f ", m[i*qntS + j]);
        }
        printf("\n");
    }
}

int main() {
    int i, j;

    double mat1[3][5] = { {13.1, 5, 6.9, 23.87, 43}, 
                          {65, 17.75, 1.3, 9.12, 11},
                          {54, 3, 9.8, 23.8, 9.3} };
    double mat2[3][5] = { {11, 13, 22, 34, 65},
                          {7, 23, 90, 4, 1}, 
                          {9.3, 13.45, 23.89, 34.65, 2.96} };
    double matRes[3][5];

    f1(&mat1[0][0], &mat2[0][0], &matRes[0][0], 3, 5);

    return 0;
}

Y obtengo este error:

error: subscripted value is not an array, pointer, or vector
                        m[i][j] = p[i][j] + n[i][j];
                                            ~~~~^~

Entiendo que estoy intentando utilizar un arreglo de dos dimensiones en una función, pero solo tengo un arreglo de una dimensión con 15 elementos.

Lo siento, intenté encontrar la respuesta aquí pero no pude.</stdlib.h></stdio.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    ¡Hola!

    Parece que el error que estás obteniendo se debe a que estás intentando acceder a una matriz bidimensional utilizando la sintaxis de una matriz unidimensional. Cuando pasas una matriz bidimensional a una función en C, necesitas utilizar punteros a punteros (es decir, un puntero doble) para preservar la segunda dimensión.

    Para solucionar este problema, debes modificar la declaración de la función para aceptar punteros dobles, de la siguiente manera:

    void f1(double **p, double **n, double **m, int qntF, int qntS)
    

    Y luego modificar el bucle en la función para utilizar la notación de puntero, de la siguiente manera:

    for(i=0; i<qntf; i++){="" for="" (j="0;"></qntf;><qnts; j++){
            *(m + i*qnts + j) = *(p + i*qnts + j) + *(n + i*qnts + j);
        }
    }
    

    esto te permitirá acceder correctamente a las matrices bidimensionales utilizando punteros.

    ¡espero que esto te ayude! avísame si tienes más preguntas. j++){=”” (m=”” +=”” iqnts=”” +=”” j)=”(p” +=”” iqnts=”” +=”” j)=”” +=”” (n=”” +=”” iqnts=”” +=”” j);=”” }=”” }=”” ="" esto="" te="" permitirá="" acceder="" correctamente="" a="" las="" matrices="" bidimensionales="" utilizando="" punteros.="" ¡espero="" que="" esto="" te="" ayude!="" avísame="" si="" tienes="" más=""></qnts; j++){
    *(m + i*qnts + j) = *(p + i*qnts + j) + *(n + i*qnts + j);
    }
    }

    esto te permitirá acceder correctamente a las matrices bidimensionales utilizando punteros.

    ¡espero que esto te ayude! avísame si tienes más preguntas.>

Comments are closed.