【问题标题】:Is there any difference between the definitions int arr; and int arr[1];定义 int arr; 之间有什么区别吗?和 int arr[1];
【发布时间】:2015-01-06 10:27:54
【问题描述】:

我只是想知道,int arr;int arr[1]; 的定义有什么区别(除了访问,我知道我们需要以 arrarr[0] 的身份访问)。据我所知,两者都分配了相同大小的内存(sizeof(int))。有没有关于这些分配的任何其他细节。

【问题讨论】:

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

标签: c memory-management definition


【解决方案1】:

我认为int arr[1] 分配的内存比int arrint arr[1] 在第一个元素上创建一个指针的事实。所以你有arr指针,这是&arr[0]的注册值和arr[0]值。

你也可以通过*arr直接访问arr[0]

【讨论】:

    【解决方案2】:
    int arr;
    

    这里arr是一个int类型的变量。sizeof(arr)将返回整数的大小。

    int arr[1];
    

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

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

    【讨论】:

      猜你喜欢
      • 2021-09-16
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 2018-06-16
      • 2018-08-26
      相关资源
      最近更新 更多