Obtenir la taille du pointeur en C
Comment puis-je obtenir la taille d'un pointeur en C à l'aide sizeof
? Je veux malloc de la mémoire pour stocker un pointeur (pas la valeur d'être souligné).
Autant que je sache, le pointeur de différents types ne sont pas la garantie d'avoir la même taille.
Vraiment? Pouvez-vous fournir un exemple de source? J'ai toujours supposé que tous les pointeurs ont la même taille, car ils sont tous en se référant à des emplacements de mémoire dans le même espace d'adressage.
Un contre-exemple trivial est un pointeur de fonction; ce n'est pas nécessairement le même espace d'adressage. Voir aussi: stackoverflow.com/questions/916051/....
C Standard mandats que des pointeurs vers des objets sont tous de la même taille, mais n'impose pas de pointeurs de fonctions sont de la même taille que des pointeurs vers des objets (rappelez-vous 80286 et petit, moyen, grand, énorme modèles de mémoire, etc). POSIX mandats que les pointeurs de fonctions sont de la même taille que des pointeurs vers des objets.
Avez-vous une norme spécifique citation dans l'esprit des "pointeurs vers des objets sont tous de la même taille"?
Vraiment? Pouvez-vous fournir un exemple de source? J'ai toujours supposé que tous les pointeurs ont la même taille, car ils sont tous en se référant à des emplacements de mémoire dans le même espace d'adressage.
Un contre-exemple trivial est un pointeur de fonction; ce n'est pas nécessairement le même espace d'adressage. Voir aussi: stackoverflow.com/questions/916051/....
C Standard mandats que des pointeurs vers des objets sont tous de la même taille, mais n'impose pas de pointeurs de fonctions sont de la même taille que des pointeurs vers des objets (rappelez-vous 80286 et petit, moyen, grand, énorme modèles de mémoire, etc). POSIX mandats que les pointeurs de fonctions sont de la même taille que des pointeurs vers des objets.
Avez-vous une norme spécifique citation dans l'esprit des "pointeurs vers des objets sont tous de la même taille"?
OriginalL'auteur Matt | 2012-03-18
Vous devez vous connecter pour publier un commentaire.
Donnée d'un type arbitraire (j'ai choisi
char
ici, mais c'est pour des raisons d'exemple concret):Vous pouvez utiliser l'une de ces expressions:
Conduisant à une
malloc()
appel comme:La dernière version a quelques avantages, en ce que si le type de
ppc
changements, l'expression toujours alloue de l'espace correct.Vrai, mais je trouve qu'ils clarifier l'expression tout à fait un peu. C'est une question de style, et pas quelque chose qui devrait être édité.
Les parenthèses sur
sizeof()
sont en option dans certains cas. Dans les 25 ans de la programmation en C que j'ai fait, je n'ai jamais pris la peine de dépenser l'effort de se rappeler lorsque les parenthèses sont facultatives et quand ils ne le sont pas; ils sont toujours correct, j'ai donc tout simplement refuser d'apprendre quand ils sont en option. La cohérence est plus précieux pour moi.Si vous êtes à répondre à des débutants et vous donner inutile de syntaxe comme ça, ils peuvent en venir à croire que c'est nécessaire. Si quelqu'un vous demande comment faire pour retourner une valeur à partir d'une fonction, doit-on leur donner
return (42);
?ce qui est inutile syntaxe? La mémoire " sizeof(quelque chose) avec des parenthèses est toujours correcte est tout un tas de plus facile que de se rappeler quand les parenthèses ne sont pas nécessaires. Je considère le manque des parenthèses, comme l'un des pièges que le compilateur C écrivains ont à traiter, et mortel ordinaire programmeurs ne devriez jamais avoir à vous soucier de.
OriginalL'auteur
Cela devrait faire l'affaire:
OriginalL'auteur
devrait être en mesure d'atteindre votre but. Quelle que soit la plate-forme est, ce code devrait fonctionner.
OriginalL'auteur