2010-12-01 52 views
0

Je suppose que tout comme les tableaux standard (c'est-à-dire les tableaux d'entiers), lorsque vous passez un tableau de structs, vous devez passer la taille du tableau. Cependant, ce que je ne comprends pas encore, c'est que lorsque vous prenez sizeof un premier élément de structure, vous obtenez 4 (ce qui signifie 4 octets dans le premier élément?).Passage d'un tableau struct dans une fonction et exécution de l'opération sizeof

Maintenant, je passe un tableau de structs qui contient uniquement des chaînes. J'inspecte la taille d'un seul élément de tableau (souvenez-vous qu'il s'agira d'une structure). Je reçois quelque chose comme 28, mais après l'avoir passé dans une fonction (et oui en passant dans la fonction je veux dire passer l'adresse du premier élément dans mon tableau), je reçois seulement 4.

Maintenant, je devine que sizeof obtient le premier élément de ma structure dans le tableau. J'ai donc mon myarray tableau de type myStruct:

myStruct {String name Adresse String Chaîne code postal }

Je présume que sizeof cherche à "nom"? Mais je sais pertinemment que ce nom ne fait pas 4 octets de long - il est 10.

Qu'est-ce que sizeof regarde exactement? À quoi ressemble la structure de la mémoire d'un tableau de structures?

Merci Thomas

+1

veuillez indiquer la langue lorsque vous posez des questions. – TelegramSam

Répondre

0

Le 4 sera la taille du pointeur que vous avez passé plutôt que la taille de la structure à laquelle il se réfère.

+0

ahh (voir mon post). J'ai essayé de le déréférencer et j'en ai obtenu 32. Maintenant, pourquoi est-ce que le premier élément de ma liste est un type que j'ai défini comme étant une chaîne de 10 caractères? – Prof

+0

nous ne pouvons pas répondre à cela sans votre définition struct et la connaissance de la plate-forme et du compilateur –

0

sizeof() fonctionne avec des types et non des objets. sizeof(some_object) est implicitement considéré comme - en utilisant la pseudo-notation - "".