Comment trouver la taille d'une variable à l'aide d'sizeof
Nous supposons je l'ai déclaré à la variable " i " de certains type de données (peut être de type int, char, float ou double) ...
REMARQUE: Simplement de considérer que " je " est déclarée et ne prennent pas la peine si c'est un int ou char ou float ou double type de données. Étant donné que je veux une solution générique, je suis simplement mentionner que la variable " i " peut être de l'un quelconque des types de données, à savoir de type int, char, float ou double.
Maintenant que je peux trouver la taille de la variable " i " sans opérateur sizeof?
pourquoi ne voulez-vous pas utiliser sizeof() ?
Trouvé une semblable question. stackoverflow.com/questions/1219199/...
Une question similaire est ici, par la manière: stackoverflow.com/questions/1219199/...
Meh, ninja avais...
Cela sonne comme une question d'entrevue.....
Trouvé une semblable question. stackoverflow.com/questions/1219199/...
Une question similaire est ici, par la manière: stackoverflow.com/questions/1219199/...
Meh, ninja avais...
Cela sonne comme une question d'entrevue.....
OriginalL'auteur codingfreak | 2009-09-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la macro suivante, prise de ici:
L'idée est d'utiliser l'arithmétique des pointeurs (
(&(var)+1)
) pour déterminer le décalage de la variable, puis soustraire le original adresse de la variable, céder sa taille. Par exemple, si vous avez unint16_t i
variable situé au0x0002
, vous seriez en soustrayant0x0002
de0x0006
, obtenant ainsi0x4
ou 4 octets.Cependant, je ne vois pas vraiment de raison valable de ne pas utiliser
sizeof
, mais je suis sûr que vous devez avoir un.Je pense que cette logique pourrait être utile pour trouver la taille d'un type de données, mais comment agit d'une variable inconnue de type de données
Qu'entendez-vous par des inconnus, comment voulez-vous déclarer ? Si vous disposez d'une variable, comme, par exemple,
int i
,sizeof_var(i)
vous donnera sa taille.Supposons que vous avez tout simplement oublié de quel type de données que vous avez déclaré la variable "i". Ce que je veux dire, c'est quel que soit le type de données pour lequel il a été déclaré que nous devrions toujours être en mesure de trouver la taille de la variable "i"
Cela peut entraîner un comportement indéterminé si l'adresse n'est pas representible dans
size_t
(par exemple, architecture segmentée), et c'est aussi, sans garantie de retour de la taille correcteOriginalL'auteur João Silva
Cela fait bien longtemps depuis que j'ai écrit tout le code en C et je ne l'ai jamais été, mais cela semble correcte:
Je suis sûr que quelqu'un peut me dire beaucoup de raisons pour lesquelles cela est faux, mais il affiche une valeur raisonnable pour moi.
void *
àchar *
- vous n'êtes pas censé faire de l'arithmétique des pointeurs avecvoid *
.J'ai vérifié, c'est OK avec un rembourrage sizeof fait la même chose et comprend un rembourrage dans la taille de la var. Par conséquent, il woks exactement la même.
À l'aide de (char*) au lieu de (void*) permettrait d'éviter les avertissements du compilateur sur void* calcul et ne donnent le même résultat, car un char a toujours de la taille 1.
Cela va fonctionner sur des processeurs qui ont octet de mémoire adressable. Je ne suis pas sûr de savoir si cela fonctionnerait sur le DSP56300 processeurs de la série où le char et int sont à la fois stockés sur 24 bits pour les emplacements de la mémoire. Le processeur n'a pas l'octet d'adressage de sorte que la différence entre les valeurs de pointeur pour les caractères ou les ints permettra à la fois d'être 1.
hors de propos.
sizeof
est définie en termes dechar
unités, de sorte que le résultat sera correct. Si votre application utilise 24 bits caractères, mais artificiellement restreint à 8 bits de large, alors il n'est pas de C. C de mandatschar
n'ont pas de rembourrage bits.OriginalL'auteur Joachim Sauer
Cela fonctionne..
p2 - p1
devrait être(int)(p2 - p1)
pour correspondre le spécificateur de format%d
Et vous avez besoin d'lance le pointeur de conversions:
p1 = (char *)&a;
OriginalL'auteur Achu
explication sera agréable.
Alors que ce code peut répondre à la question, en fournissant plus de contexte sur comment et/ou pourquoi, il résout le problème serait d'améliorer la réponse à long terme de valeur.
OriginalL'auteur ra1
Essayer cela,
Pour la suite définie par l'utilisateur type de données,
OriginalL'auteur josh
Cela devrait vous donner la taille de votre variable
OriginalL'auteur Karthick S
Programme pour trouver la Taille de la variable sans l'aide de
sizeof
opérateurOriginalL'auteur debaonline4u
OriginalL'auteur Nitesh Pratap Singh
Déclaration ci-dessous donnera la solution générique:
i
est un nom de variable, qui peut être n'importe quel type de données (char, short, int, float, double, struct).void *
pointeurs. C'est (généralement) un C de GNU extension.OriginalL'auteur vikram p