-1
votes

Pourquoi ne puis-je pas passer et éditer ce tableau à une fonction?

La réponse précédente a été répondue mais j'en ai une autre dans la même veine. Pourquoi le code ne fonctionne pas lorsque j'essaie d'utiliser un tableau multidimensionnel?

void change(int *);

int main(void){
    int array[1][2] = {2};

    printf("%d", array[1][2]);
    change(array);
    printf("%d", array[1][2]);
}

void change(int *array){
    array[1][2] = 4;
}

c

4 commentaires

Changer prend un argument int , pas int * , donc un disjoncteur de l'affaire hors de la porte. Deuxièmement, * Array [0] est certainement faux, même après avoir corrigé le type de paramètre au bon int * . Ce serait array [0] = ... ou * array = ... pour définir le premier élément, mais pas les deux. Je pense qu'un examen approfondi des tableaux, des paramètres de fonction et qui transmettent le premier comme des arguments à ce dernier, figurent sur votre prochain agenda.


Du point de vue à l'intérieur de Modifier (int) , ce qui rendrait le paramètre "Array" un tableau, mis à part le nom que le compilateur ignore?


Dupliqué possible de Comment passer une matrice multidimensionnelle à une fonction de C et C ++


Maintenant, vous avez complètement modifié le type de tableau déclaré (était int [2] , maintenant son int [1] [2] . En outre, vos deux printf Les commandes utilisent tous les deux des index non valides sur la variable variable de tableau de Dim N sont indexés à l'aide de 0 .. (N-1) .


3 Réponses :


0
votes

C langage C utilise Pass par valeur code>.
Donc, vous devez recevoir l'adresse de la matrice comme argument.

void change(int array[2][3], int, int, int);
void change2(int *, int, int, int, int);

int main(void) {
    int array[2][3] = { { 1, 2, 3 }, {4, 5, 6} };

    printf("%d", array[1][1]);
    change(array, 1, 1, 10);
    printf("%d", array[1][1]);
    change2((int *)array, 3, 1, 1, 20);
    printf("%d", array[1][1]);
}

void change(int array[2][3], int row, int col, int value) {
    array[row][col] = value;
}

void change2(int *array, int size_col, int row, int col, int value) {
    *(array + row*size_col + col) = value;
}


1 commentaires

Comment cela fonctionnerait-il si le tableau avait plus d'une dimension?



1
votes

Vous devez utiliser des astérisques pour le paramètre au moment de la déclaration et de la définition. Pour effectuer une matrice [0] = 4, il vous suffit d'attribuer 4 au tableau [0] sans astérisque. Votre code devrait donc être:

void change(int *);

int main(void){
    int array[1] = {2};

    printf("%d", array[0]);
    change(array);
    printf("%d", array[0]);
}

void change(int *array){
    array[0] = 4;
}


0 commentaires

1
votes

Entrez le code ici CODE> VOID Change (int *);

int main(void){
    int array[1] = {2};

    printf("%d\n", array[0]);
    change(array);
    printf("%d\n", array[0]);
}

void change(int* array)
{
    array[0] = 4;
    *(array + 0) = 4;
}


0 commentaires