2010-05-03 3 views
1

quelle est la différence entre les déclarations de fonctions suivantes, qui créent et retournent le tableau en C/C++? Les deux méthodes créent le tableau et le remplissent avec les valeurs appropriées et renvoie true si tout est passé.Quelle est la différence entre les paramètres de tableau dans C

bool getArray(int* array); 
bool getArray(int* array[]); 

Merci

Cordialement, Sten

+0

Comment le premier retournerait-il un nouveau tableau? Avez-vous manqué un astérisque lors de la création de la question? –

Répondre

3

Si cela vous aide à réfléchir à ce que vous pouvez vous rappeler que int foo[] est la même chose que int *foo à un niveau. Ainsi, dans votre exemple, le premier est passé un pointeur vers un int tandis que le second est passé un pointeur vers un pointeur vers un int.

+4

Juste pour clarifier: 'int foo []' et 'int * foo' sont équivalents * dans le contexte des paramètres de fonction *. – jamesdlin

+0

Salut, Merci - cela aide vraiment à résoudre mon problème. Je n'utilise normalement que C++ ou Objective-C avec des classes de conteneurs spéciales pour tout et chaque fois que je fais le CI pur tomber dans les problèmes pendant quelques jours jusqu'à ce que je sois sur le bon chemin: (( La bonne quête devrait être: Quelle est la différence entre bool getArray(int** array); et bool getArray(int* array[]); Je pense que (je l'espère à juste titre), il n'y a pas de différence ... Merci à tous vous les gars pour l'aide. Cordialement – STeN

1

bool getArray(int *array); prend un pointeur vers un int en tant qu'argument (en fait un tableau d'ints à remplir). bool getArray(int *array[]); prend un tableau de pointeurs int. Le premier est celui que vous voulez, bien que l'appelant ait besoin d'allouer un tableau de sortie suffisamment grand pour que getArray() puisse y copier les éléments du tableau. Une façon de comprendre les déclarations pointeur/tableau C consiste à les considérer comme illustrant comment accéder au type de base. int *array signifie que si vous dites *array, vous obtiendrez un int. int *array[] signifie que si vous dites *array[x], vous obtiendrez un int. char (*array)[5][2][3] signifie que si vous dites (*array)[0 thru 4][0 thru 1][0 thru 2], vous obtiendrez un caractère.

+1

Si je devais le faire, je ferais probablement 'int * getArray()' ;-) –

0

La seconde nécessite un pointeur vers un tableau. Donc si vous le tableau est int *getme; alors vous appelez getArray(&getme);

+0

Non, le second nécessite un tableau de pointeurs Un pointeur vers un tableau serait 'int (* array) []'. –

+0

Oops, c'est vrai. Désolé, raté celui-là. – Anthony

1

D'un côté, le code que vous avez posté est C++. Il n'y a pas de "C/C++" ... Ce qui rend vos prototypes reconnaissables comme C++ - conformes est l'utilisation du type de données "bool" pour les types de retour des fonctions. Les variables booléennes ne sont pas définies dans C.

+2

"bool" a été ajouté à C dans C99, bien que vous devez #include pour l'obtenir. –

Questions connexes