3

特定のデータ型 (int、char、float、または double) の変数 'i' を宣言したと仮定しましょう ...

注:単に 'i' が宣言されていると考えてください。それが int、char、float、または double のデータ型であるかどうかは気にしないでください。私は一般的な解決策が必要なので、変数 'i' は int、char、float、または double のいずれかのデータ型にすることができると簡単に述べています。

sizeof 演算子なしで変数 'i' のサイズを見つけることができますか?

4

11 に答える 11

21

hereから取得した次のマクロを使用できます。

#define sizeof_var( var ) ((size_t)(&(var)+1)-(size_t)(&(var))) 

ポインタ演算 ( (&(var)+1)) を使用して変数のオフセットを決定し、変数の元のアドレスを減算して、そのサイズを算出するという考え方です。たとえば、int16_t i変数が にある場合、 から0x0002減算することで、または 4 バイトが得られます。0x00020x00060x4

ただし、 を使用しない正当な理由は実際にはわかりませんがsizeof、それがあるに違いないと確信しています。

于 2009-09-08T11:13:53.327 に答える
7

Cコードを書いてから何年も経ちましたが、私はそれが得意ではありませんでしたが、これはほぼ正しいようです:

int i = 1;
size_t size = (char*)(&i+1)-(char*)(&i);
printf("%zi\n", size);

誰かがこれが間違っている理由をたくさん教えてくれると確信していますが、それは私にとって妥当な値を出力します。

于 2009-09-08T11:16:47.800 に答える
-1

これを試して、

#define sizeof_type( type )  ((size_t)((type*)1000 + 1 )-(size_t)((type*)1000))

次のユーザー定義データ型の場合、

struct x
{
    char c;
    int i;
};

sizeof_type(x)          = 8
(size_t)((x*)1000 + 1 ) = 1008
(size_t)((x*)1000)      = 1000
于 2010-11-12T07:38:43.300 に答える
-1

sizeof演算子を使わずに変数のサイズを求めるプログラム

#include<stdio.h>
int main()
  {
  int *p,*q;
  int no;
  p=&no;
   printf("Address at p=%u\n",p);
  q=((&no)+1);
  printf("Address at q=%u\n",q);
  printf("Size of int 'no': %d Bytes\n",(int)q-(int)p);

  char *cp,*cq;
    char ch;
  cp=&ch;
  printf("\nAddress at cp=%u\n",cp);
  cq=cp+1;
  printf("Address at cq=%u\n",cq);
  printf("Size of Char=%u Byte\n",(int)cq-(int)cp);

  float *fp,*fq;
  float f;
  fp=&f;
 printf("\nAddress at fp=%u\n",fp);
  fq=fp+1;
  printf("Address at fq=%u\n",fq);
  printf("Size of Float=%u Bytes\n",(int)fq-(int)fp);

  return 0;
}
于 2015-12-15T19:08:19.790 に答える
-1

これにより、変数のサイズがわかります

#define mySizeof(type) ((uint)((type *)0+1))
于 2014-06-12T00:51:10.490 に答える
-2
#include<stdio.h>

#include<conio.h>

struct size1


  {
int a;
char b;
float c;
};

void main()
{
struct size1 *sptr=0;  //declared one pointer to struct and initialise it to zero//
sptr++;                 
printf("size:%d\n",*sptr);
getch();
}
于 2011-09-30T18:28:56.433 に答える