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;
}
3 Réponses :
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;
}
Comment cela fonctionnerait-il si le tableau avait plus d'une dimension?
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;
}
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;
}
Changer CODE> prend un argumentint code>, pasint * code>, donc un disjoncteur de l'affaire hors de la porte. Deuxièmement,* Array [0] code> est certainement faux, même après avoir corrigé le type de paramètre au bonint * code>. Ce seraitarray [0] = ... code> ou i>* array = ... code> 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) code>, 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] code>, maintenant sonint [1] [2] code>. En outre, vos deuxprintf Les commandes code> utilisent tous les deux des index non valides sur la variable code> variable de tableau code> de DimN code> sont indexés à l'aide de0 .. (N-1) code>.