Maison > développement back-end > C++ > Comment transmettre des tableaux multidimensionnels à des fonctions en C et C ?

Comment transmettre des tableaux multidimensionnels à des fonctions en C et C ?

DDD
Libérer: 2024-12-24 17:28:18
original
182 Les gens l'ont consulté

How Can Multidimensional Arrays Be Passed to Functions in C and C  ?

Passer des tableaux multidimensionnels aux fonctions en C et C

En programmation, les tableaux sont des structures de données essentielles pour stocker des collections de données. Lorsqu'il s'agit de tableaux multidimensionnels, il est important de comprendre comment ils peuvent être transmis à des fonctions pour effectuer des opérations sur leurs éléments.

Considérez le code C suivant :

void print(int *arr[], int s1, int s2) {
    // ...
}

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4);
}
Copier après la connexion

Ce code vise à transmettre un tableau multidimensionnel a de type int[4][4] vers une fonction print qui attend un tableau de pointeurs vers des entiers (int **). Étonnamment, ce code se compile avec succès en C mais pas en C.

Pourquoi C génère une erreur

En C, l'erreur est claire :

cannot convert `int (*)[4]' to `int**' for argument `1' to 
`void print(int**, int, int)'
Copier après la connexion

Cette erreur signifie que C ne permet pas la conversion implicite d'un tableau multidimensionnel (int[4][4]) vers un tableau de pointeurs vers des entiers (int **). En effet, ces deux types de données sont fondamentalement différents dans leur structure et leur interprétation.

Comment corriger l'erreur

Pour corriger cette erreur, vous pouvez utiliser une technique appelée « décroissance des adresses de tableau » en C ou convertir explicitement le tableau multidimensionnel en un tableau de pointeurs en C .

C:

int main() {
    int a[4][4] = {{0}};
    print(a, 4); // Pass the base address of the multidimensional array (array address decay)
}

void print(int *arr, int s) {
    // ...
}
Copier après la connexion

C :

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4); // Explicit conversion to an array of pointers
}

void print(int **arr, int s1, int s2) {
    // ...
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal