2010-06-21 6 views
3

J'ai un pointeur (uint8_t * myPointer), que je passe en paramètre à une méthode, puis cette méthode définit une valeur pour ce pointeur, mais je veux savoir combien d'octets sont utilisés (pointés?) Par myPointer variable.Comment trouver le nombre d'octets utilisés par un pointeur?

Merci d'avance.

+1

Question en double. –

+0

@Stefan - pouvez-vous ajouter un lien vers le doublon? – ChrisF

+0

@ChrisF - Bien sûr! http://stackoverflow.com/questions/1975128/sizeof-an-array-in-the-c-programming-language –

Répondre

11

La taille du pointeur: sizeof(myPointer) (égal à sizeof(uint8_t*))
La taille du pointée: sizeof(*myPointer) (égal à sizeof(uint8_t))

Si vous vouliez dire que ce point à un tableau, il n'y a aucun moyen de savoir cette. Un pointeur pointe juste, et ne se soucie pas d'où vient la valeur.

Pour passer un tableau via un pointeur, vous devrez aussi passer la taille:

void foo(uint8_t* pStart, size_t pCount); 

uint8_t arr[10] = { /* ... */ }; 
foo(arr, 10); 

Vous pouvez utiliser un modèle pour faire passer un tableau entier plus facile:

template <size_t N> 
void foo(uint8_t (&pArray)[N]) 
{ 
    foo(pArray, N); // call other foo, fill in size. 
    // could also just write your function in there, using N as the size 
} 

uint8_t arr[10] = { /* ... */ }; 
foo(arr); // N is deduced 
+0

+1 - mais il convient de noter que si 'foo' est une grosse fonction, vous encourrez code gonfler avec le modèle si le nombre de valeurs différentes de N est grand. Vous pouvez atténuer cela en faisant un foo un truc qui appelle une surcharge de foo acceptant un paramètre de longueur explicite. –

3

Vous ne pouvez pas. Vous devez vous-même transmettre la taille du tampon pointé par le pointeur.

0

Vous ne pouvez pas. À moins que le tableau ne soit instancié au moment de la compilation. Exemple int test[] = {1, 2, 3, 4}; Dans ce cas, vous pouvez utiliser sizeof(test) pour vous renvoyer la taille correcte. Dans le cas contraire, il est impossible de connaître la taille d'un tableau sans stocker le vôtre.

0

I supposons que vous voulez dire la mémoire nécessaire pour le pointeur seulement. Vous pouvez vérifier cela à la compilation avec sizeof(myPointer).

Questions connexes