0

私は以下のコードを持っています:

int* d = (int*) malloc(100 * sizeof(int));
cout<<"size of d which is pointer is: " << sizeof(d)<<endl;

dがptrであるため、sizeofは4を出力することを知っています。しかし、sizeofを使用して配列全体のサイズを見つけるにはどうすればよいですか

4

4 に答える 4

7

できません-sizeofコンパイル時の操作であるため、動的ではありません。

C ++を使用しているので、std::vector代わりに使用してください。それ以外の場合は、ポインタと配列のサイズの両方を格納する構造を作成します。代わりにそれを回してください。

于 2013-02-10T09:04:39.723 に答える
1

ポインタは、データが保存されているメモリ内の場所を示します。そのため、その情報だけからデータのサイズを取得することはできません。

これは、私の住所を知ることで私の家の大きさを知ることに似ています(事前の知識やGoogleマップなどのツールの使用なしで)

于 2013-02-10T09:07:56.853 に答える
1

sizeof- you've got it in your original malloccall -を使用して、配列全体のサイズをすでに知っていると主張することができます100 * sizeof(int)。機械はポインタに関連付けられたメモリの量を内部的に認識してmallocいる必要がありますが (対応するfree呼び出しに必要です)、一部の実装ではこの情報を返す関数が提供されているようですが、私が知る限り、実装に依存しない移植可能な方法はありません自分で処理せずにこれを行います。

于 2013-02-10T09:29:28.123 に答える
1

直接答え。いいえ、できませんが、これを試すことができます:

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

于 2013-02-10T09:16:28.993 に答える