2013-03-01 7 views
2

J'espérais que quelqu'un serait en mesure de me dire si je suis bien ou mal, avec mon code suivant.incrémenter par un pointeur sur un tableau de pointeur

Je suis en train d'imprimer les données renvoyées par la fonction mpg123_decoders(), ce qui est de la valeur char** (ou « un tableau terminé par NULL des décodeurs pris en charge par la CPU »).

const char ** pdecoders; 
pdecoders = mpg123_decoders(); 
do { 
    con_msg(MSG_BAD, "%s\n", *pdecoders); 
    pdecoders += 1; 
} while(*pdecoders != NULL); 

Je ne suis pas convaincu que mon code suivant fait correctement, comme je suis sûr qu'il ya plus de décodeurs disponibles.

+0

semble correct pour moi. Comment êtes-vous sûr qu'il y a plus de décodeurs disponibles? – mtahmed

+0

'pdecoders + = 1' fonctionnera-t-il vraiment sur un caractère _const_ **? – emil

+1

Je pense que pdecoders + = 1 devrait fonctionner sur constchar **, car ce sera la valeur de ce que pdecoders pointe vers (** pdecoders) qui est const. – danwag

Répondre

3

Votre exemple de code ne semble pas trop cher pour moi. Juste au cas où il n'y a pas de données du tout, je changerais

do { 
    con_msg(MSG_BAD, "%s\n", *pdecoders); 
    pdecoders += 1; 
} while(*pdecoders != NULL); 

à

while(*pdecoders != NULL){ 
    con_msg(MSG_BAD, "%s\n", *pdecoders); 
    pdecoders += 1; 
} 

Mais le reste semble assez bien. Bien que cela puisse sembler un peu déroutant d'abord en raison de la façon dont le mot-clé const est traité en C mais en fait ce sont les données pointées qui sont const et qui ne sont pas modifiées du tout, donc il ne devrait y avoir aucun problème avec ça.

Essayez de lire la déclaration exactement comme il est donné et vous verrez il n'y a pas de problème avec elle:

const char **pdecoders 

se lit comme « pdecoders est un pointeur vers un pointeur sur un const char ».

Le cas problématique au lieu lirait

char** const pdecoders 

Comme cela se révélerait être un « pointeur const à un pointeur sur un char »

+0

votre réponse est correcte: mais le code juste de [mpg123_decoders()] (http://audacious-plugins.sourcearchive.com/documentation/2.4~beta2-0ubuntu1/optimize_8c-source.html) –

+0

nous pouvons utiliser l'opérateur de post-incrémentation au lieu de "pdecoders + = 1", n'est-ce pas? – varnie

+0

@varine: soit '++ pdecoders' ou' pdecoders ++ se do' vous pouvez même aller avec 'con_msg (MSG_BAD, "% s \ n", * pdecoders ++), et' 'copletely laisser de pdecoders + = 1' bien qu'il pourrait pas être le meilleur style de tous les temps. – mikyra

Questions connexes