C arr中的定义是否有任何差异;和int-arr[1];

C arr中的定义是否有任何差异;和int-arr[1];,c,memory-management,definition,C,Memory Management,Definition,我只是想知道,int arr的定义有什么不同;和int-arr[1];除了访问,我知道我们需要以arr和arr[0]的身份访问。据我所知,两者都分配相同大小的内存sizeofint。是否有关于这些分配的其他详细信息 int arr; 这里arr是int.sizeofar类型的变量,它将返回整数的大小 int arr[1]; 这里,arr是一个int类型的数组,它可以保存int类型的元素。在这种情况下,它只能保存一个整数元素。sizeofarr[0]将返回数组中第一个整数元素的大小 对于局部变

我只是想知道,int arr的定义有什么不同;和int-arr[1];除了访问,我知道我们需要以arr和arr[0]的身份访问。据我所知,两者都分配相同大小的内存sizeofint。是否有关于这些分配的其他详细信息

int arr;
这里arr是int.sizeofar类型的变量,它将返回整数的大小

int arr[1];
这里,arr是一个int类型的数组,它可以保存int类型的元素。在这种情况下,它只能保存一个整数元素。sizeofarr[0]将返回数组中第一个整数元素的大小

对于局部变量和数组,内存都是在堆栈上分配的。

我认为int-arr[1]分配的内存比int-arr多 int arr[1]在第一个元素上创建指针的事实。因此您有了arr指针,即注册值&arr[0]和arr[0]值


此外,您还可以通过*arr

直接访问arr[0]。每种情况下,arr的类型都不同。两者唯一相同的是,它们需要相同的内存量。其他一切都不一样。它们是不同的类型,需要使用不同的方法。我假设,当arr[1]是一个局部变量时,它总是在堆栈上分配,而不能在寄存器中分配。“目前我看不到空间分配的其他差异。”Marian感谢您的评论。这就是我所期望的。@Marian:数组可以用register关键字定义;你只是不能索引它,因为你不能获取它的地址。