私は以下のコードを持っています:
int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;
dがptrであるため、sizeofは4を出力することを知っています。しかし、sizeofを使用して配列全体のサイズを見つけるにはどうすればよいですか
私は以下のコードを持っています:
int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;
dがptrであるため、sizeofは4を出力することを知っています。しかし、sizeofを使用して配列全体のサイズを見つけるにはどうすればよいですか
できません-sizeof
コンパイル時の操作であるため、動的ではありません。
C ++を使用しているので、std::vector
代わりに使用してください。それ以外の場合は、ポインタと配列のサイズの両方を格納する構造を作成します。代わりにそれを回してください。
ポインタは、データが保存されているメモリ内の場所を示します。そのため、その情報だけからデータのサイズを取得することはできません。
これは、私の住所を知ることで私の家の大きさを知ることに似ています(事前の知識やGoogleマップなどのツールの使用なしで)
sizeof
- you've got it in your original malloc
call -を使用して、配列全体のサイズをすでに知っていると主張することができます100 * sizeof(int)
。機械はポインタに関連付けられたメモリの量を内部的に認識してmalloc
いる必要がありますが (対応するfree
呼び出しに必要です)、一部の実装ではこの情報を返す関数が提供されているようですが、私が知る限り、実装に依存しない移植可能な方法はありません自分で処理せずにこれを行います。
直接答え。いいえ、できませんが、これを試すことができます:
int x[]={1,2,3,4};
int *ptr=x;
decltype(sizeof(*ptr)) size=0;
while(*ptr<5){
size =size+sizeof(*ptr);
ptr++;
}
cout<<"Size is : "<<size;
出力:
Size is:16