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 是否与尺寸 plint 相同?

如果不是,它如何改变大小?

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不是其中一种情况。

于 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 的大小再次与整数的大小相同,尽管它指向大小的块(10 * int 的大小)

于 2013-01-02T11:23:03.277 回答