Quelle est la bonne façon de compenser un pointeur?

Je veux passer un pointeur à une fonction. Je veux que ce pointeur à un endroit au milieu d'un tableau. Dire que j'ai un tableau comme tel unsigned char BufferData[5000];, la déclaration suivante soit correct du point de vue syntaxique?

writeSECTOR( destAddress, (char *)( BufferData + (int)(i * 512 )) );
//destAddress is of type unsigned long
//writeSECTOR prototype: int writeSECTOR ( unsigned long a, char * p );
//i is an int
Oui. Le casting de int est inutile, mais sinon, votre déclaration est valide.
En fait, je dirais que votre solution est meilleure que la plupart des propositions de réponses ci-dessous!
Je préfère le &tableau[i] l'approche la plus évidente que vous êtes à la compensation d'un pointeur vers un tableau, c'est à dire BufferData+(i*512) est moins lisible sur ses intentions, que &BufferData[i*512].
Je suis en désaccord. array + i est beaucoup plus lisible que le &array[i] parce que j'ai lu le dernier "déréférencement de tableau, l'élément i, et de prendre l'adresse" par opposition à la simple "décalage d'adresse i de la matrice". Le problème avec votre favori de la notation, c'est qu'il est de la commutation entre les pointeurs et de référencement dans une déclaration. Alors que le pointeur de plus est juste une pure mathématiques.
Vous n'êtes pas vraiment car le compilateur produira le même code. Mais c'est vraiment une chose subjective. Quand je vois tableau crochets je sais que c'est un pointeur sur un tableau et de réfléchir sur les plages.

OriginalL'auteur PICyourBrain | 2010-10-06