0

配列を宣言するとメモリのブロックが予約されることはわかっていますが、ポインターで表される配列ではそうではありません。配列の最初の要素のアドレスが含まれているためです。

ただし、サイズが単一の long int を指している状態から、動的に宣言された long 整数の配列にどのように変化するかについては、この件に関する説明をいただければ幸いです。

敬具

例 :

long int *plint = 5; // size is the same as

long int *arr;

arr = (long int*)malloc(5*(sizeof(long int));

サイズarrはサイズプリントと同じですか?

そうでない場合、どのようにサイズが変わりますか?

4

3 に答える 3

3

あなたのコードは次のようになると思います:

long *ptr = 0;
long ra[10];
printf("%d %d\n", (int)(sizeof(ptr)), (int)(sizeof(ra)) );

この場合ra 、 はポインタではなく、そのサイズはポインタのサイズではありません。

&ra[0]は最初の要素へのポインタであるため、次のようにすることができます。

print("%d\n", (int)(sizeof(&ra[0])));

と同じサイズであることがわかりますptr

ほとんどの場合、ra式で使用すると、最初の要素へのポインターに「減衰」します。しかしsizeof、それらのケースの1つではありません。

于 2013-01-02T11:06:19.760 に答える
1

答えは、ポインターのサイズは変わらないということです。簡単な説明は、ポインターは別のオブジェクトのアドレスを格納する変数です。実際のサイズはプラットフォームによって異なります。

于 2013-01-02T11:02:53.550 に答える
-4

ポインタは特別な変数で、別の変数のアドレスを格納します。変数のアドレスは整数で、通常の整数変数と同じサイズになります。次のコード スニペットを検討してください。

         char c ='a';
         char *ptr = &c; 

ここで、c は文字であり、1 バイトを取り、ptr は char ポインター変数 (char 変数ではありません) です。したがって、ptr のサイズは整数のサイズと同じです。

今、

         int* ptr = (int*) malloc(10*sizeof(int));

サイズのブロックを指していますが、ptrのサイズはintegerのサイズと同じです(10 * intのサイズ)

于 2013-01-02T11:23:03.277 に答える