J'ai deux fonctions dans ma fonction principale.
J'ai essayé d'accomplir ce problème avec des pointeurs, mais comme débutant, il est très compliqué de travailler avec cela. P>
int main(){
int *p;
p = function_A();
function_B(p);
return 0;
}
int function_A(){
static int myArray[3];
myArray[0] = 11;
myArray[1] = 22;
myArray[2] = 33;
return myArray;
}
int function_B(int *myPointer){
// Here I just want to print my array I've got from function_A() to the
// console
printf("%d", *myPointer)
return 0;
}
4 Réponses :
Il y a quelques problèmes que votre compilateur vous aura déjà dit. Premièrement, vous devez définir les fonctions avant de les appeler, ou au moins en avant, déclarez-les.
second, pour renvoyer un tableau, vous devez renvoyer un pointeur sur le premier élément de ce tableau, c'est-à-dire que le type de retour est troisième, comme Fredk a souligné, lorsque vous recevez juste un pointeur, vous n'avez aucune chance de déterminer le nombre d'éléments dans le tableau ça pointe de. Vous pouvez soit terminer la matrice avec une valeur spécifique, par ex. Voir les adaptations suivantes apportées à votre programme: P> int * code> et pas int code>. p> 0 code> ou vous devez renvoyer la taille de la matrice, aussi. p> int* function_A(int *size){
static int myArray[3];
myArray[0] = 11;
myArray[1] = 22;
myArray[2] = 33;
if (size) {
*size = 3;
}
return myArray;
}
void function_B(int *myPointer, int size){
for (int i=0; i<size; i++) {
printf("%d\n", myPointer[i]);
}
}
int main(){
int *p;
int size=0;
p = function_A(&size);
function_B(p,size);
return 0;
}
Merci!! Jamais pensé à la taille des pointeurs de pointer à
Remarque: une référence à un tableau se dégrade à l'adresse du premier octet de la matrice.
Le code proposé suivant: p>
printf () code> donc sortie sur des lignes distinctes li>
ol> et maintenant, le code proposé: p> xxx pré> EURE du programme produit la sortie suivante: p>
11
22
33
Disons que vous avez une fonction qui crée une maquette de disons que tu as une fonction qui calcule la somme des entiers dans le déployer. Si nous ignorons les problèmes de débordement, cela pourrait ressembler à ceci: p> notez que dans votre comme vous pouvez le voir, n'est vraiment pas grand chose à ça. Eh bien, vous devez vous familiariser avec la syntaxe du pointeur. P> (la règle que j'aime souligner est que lorsque lorsque vous lisez des types de pointeur, lisez les spécificateurs de droite à gauche, délimité par dans ce genre de Situations, une structure em> décrivant une matrice fait beaucoup plus de sens. Par exemple: p> L'idée est que vous pouvez déclarer une variable de avec cette initialisation, la structure est toujours initialisée à un état connu et nous n'avons pas besoin d'une fonction d'initialisation distincte. Nous n'avons vraiment besoin que de quelques fonctions d'assistance: p> le bit en ligne code> statique signifie que les fonctions ne sont visibles que dans cette unité de compilation et la Compiler est libre de mettre en œuvre la fonction directement sur le site d'appel. Fondamentalement, La stratégie de croissance < / em> la partie n'est qu'un exemple. Si vous omettez la stratégie de croissance et réaffecter toujours à une "bonne politique de croissance" est très utile de débattre et dépend vraiment de la tâche à accomplir. Ce qui précède devrait très bien fonctionner sur tous les systèmes d'exploitation actuels sur les machines de bureau, les ordinateurs portables et les tablettes, lorsque le programme n'a besoin que d'une poignée de ces tableaux. P> (si un programme utilise de nombreux tableaux de ce type , il pourrait implémenter une fonction Regardons un exemple de fonction qui utilise ce qui précède. Dis, l'évident: Ajout d'un entier à la matrice: p> Un autre exemple de fonction serait celui qui trie le De nombreux nouveaux programmeurs ne réalisent pas que la bibliothèque C standard C a tifty et assez efficace Un exemple simple int code> s: taille de code> n'est pas une fonction, mais un mot clé de langage C. Son argument n'est examiné que pour sa taille. Ainsi, tailleof iarray [0] code> donne la taille de chaque élément dans iarray code> et est complètement sûr et valide même si iarray code> est indéfini ou null à ce moment. Vous voyez que les émissions d'idiome en C dans C; Apprenez à le lire comme "Taille du premier élément de iarray" em>, qui est identique à celui "taille de chaque élément de iarray" em>, car tous les éléments de la matrice de C ont exactement même taille. p> principal () code>, vous pouvez les appeler ainsi: p> * < / code> lire comme un pointeur sur em>. Ainsi, int * const a code> est "A est un const, un pointeur à int" em>, et const char ** b code> se lit comme "B est un pointeur sur un pointeur sur Const Char" em>.) p>
iarray code> type tout comme vous le feriez toute autre variable; Mais vous initialisez également ceux à un tableau vide à l'aide du iarray_init code> macro. En d'autres termes, donc: p> Statique Inline CODE> est utilisé pour les fonctions de type macro et les fonctions d'accesseur. Si vous mettez la structure dans un fichier d'en-tête (.h), vous mettez également les fonctions d'assistant CODE> STATIC CODE> ALLER CODE>. P> array-> num + plus code> éléments, votre code appellera realloc () code> très souvent, potentiellement pour chaque int code> annexé. Dans la plupart des cas, cela va souvent ralentir votre programme, car realloc () code> (ainsi que masloc () code>, calloc () code> ) est un peu lent. Pour éviter cela, nous préférons que la cavalise ou arrondir l'affectation un peu: pas trop pour perdre la mémoire allouée mais non utilisée, mais suffisamment pour conserver le programme global rapide et non sur trop de realloc () code > Appels. P> iarray_optimize () code>, qui réaffiche la matrice exactement au nombre d'éléments qu'il a. Chaque fois qu'un tableau est peu susceptible de changer de taille, appelera cette fonction garantira pas trop de mémoire est Assis inutilisé mais alloué dans les matrices.) P> int code> s dans un tableau Valeur ascendant ou descendante: p> QSort () CODE> Fonction pour les tableaux de tri; Tout ce dont il a besoin est une fonction de comparaison. Si le code code> est positif pour iarray_sort () code>, le tableau est trié par ordre croissant, le plus petit int code> d'abord; Si direction code> est négatif, puis en ordre décroissant, le plus grand int code> premier. p> principal () code> qui se lit Dans tous les int code> S de l'entrée standard, les trie et les imprime en ordre croissant (valeur croissante): p>
Si la taille de la matrice est en effet 3 (ou une autre petite valeur fixe), vous pouvez simplement utiliser des structs comme des valeurs, comme:
Votre fonction_a retourne un int, pas un tableau INT.
Votre approche ne fonctionnera jamais, car vous devez également retourner la taille de la matrice.
Je ne sais pas si votre objectif est d'apprendre à utiliser un pointeur de fonction a> i> ou à simplement passez / modifier / Retour i> Un tableau.
Est-ce que la matrice de longueur connue et une longueur courte, comme 3 représentées dans la question?
@HYDE Oui, la longueur est connue dans ce cas.