Pointeur, Adresse and co
Core
Membre
Bonsoir,
J'ai à nouveau besoin de vos lumiéres, sur une question plus orienté C cette fois.
Voici le code en question
je ne comprends pas vraiment l'intérêt du &count et du &size. Si mes souvenirs sont bons il s'agit des adresses mémoires des variables count et size.
Pourquoi ne met-on pas directement count et size
pour info cette fonction vient du core audio et permets de recupérer le nombre d'instruments d'un Audio Unit de type Music Device qu'on place dans la variable count
J'ai à nouveau besoin de vos lumiéres, sur une question plus orienté C cette fois.
Voici le code en question
<br />UInt32 count ;<br />UInt32 size = sizeof (count) ;<br /><br /> AudioUnitGetProperty (<br /> SynthUnit, kMusicDeviceProperty_InstrumentCount,<br /> kAudioUnitScope_Global, 0,<br /> &count, &size);<br />
je ne comprends pas vraiment l'intérêt du &count et du &size. Si mes souvenirs sont bons il s'agit des adresses mémoires des variables count et size.
Pourquoi ne met-on pas directement count et size
pour info cette fonction vient du core audio et permets de recupérer le nombre d'instruments d'un Audio Unit de type Music Device qu'on place dans la variable count
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Selon la doc Apple :
les 2 derniers paramètres sont bien des pointeurs (ou adresses).
Donc ce sont bien des adresses qu'il faut passer en paramètre (en l'occurrence celles des variables count et size de ton exemple).
Si tu omets le &, ce sont alors les valeurs contenues dans ces variables qui auraient été passées à la fonction (dans ton exemple, une valeur indéterminée et la valeur 4)
.
Mais dans ma pauvre tête c'est encore un peu flou.
En fait on passe un message, on ne dit pas quelle varialbe est à modifier.
Donc ca revient à dire : depose moi la valeur retournée dans cette adresse mémoire ?
et que mets count, je passe la valeur de count
et si je mets &count, je dis : c'est la que tu dois me mettre le resultat
c'est un bon résumé, oui !
.
1. En passant une adresse on ne passe que 4 octets. S'il s'agit de l'adresse d'un tableau ou d'une structure de grande taille, passer la valeur est peu performant.
2. une fonction ne peut retourner qu'une seule valeur. Le passage par référence permet de renvoyer plusieurs valeurs.
Par exemple, la méthode de NSColor getRed: green: blue: alpha: renvoie les 4 composantes d'une couleur NSColor *aColor:
float red, green, blue, alpha;
[aColor getRed:&red green:&green blue:&blue alpha:&alpha];
maintenant je suis au taquet sur ce sujet
si :
Quel est la différence entre :
et
j'ai un petit avis sur la question mais j'attends vos réponses
Ok. outNumberOfTracks n'a pas besoin d'être initialisé puisque c'est MusicSequenceGetTrackCount qui lui donne une valeur
Erreur.
C'est syntaxiquement correct : le deuxième argument de MusicSequenceGetTrackCount doit bien être de type "adresse de UInt32", donc "UInt32*". Mais cette adresse doit correspondre à celle d'une variable existante en mémoire, que l'on puisse remplir !
Deux solutions ici pour que cela devienne correct :
ou
Est-ce ce que tu avais subodoré ?
+
Chacha
Ici tu déclares une variable de type UInt32 et avec &outNumberOfTracks tu passes l'adresse de cette variable, c'est à dire, en fait, un pointeur vers cette variable.
Ici, tu déclares un pointeur de UInt32, qui pour l'instant ne pointe vers rien puisque ce pointeur n'a pas été initialisé.
Ca marche aussi, il faudait faire:
Mais c'est se compliquer la vie pour rien...
Ca vaut mieux pour la santé mentale de CoreÂ
Core, je te trouve très optimiste, ça devrait t'occuper encore quelques temps, pointeur de tableaux, pointeur de structure, tableau de pointeurs ....
hou mais bien loin de moi l'idée de faire le malin, il me reste tellement de chemin à parcourir !
Effectivement c'est ce que j'avais pisté !
merci vraiment à tous pour ces explications très pertinentes