【问题标题】:Data type mix up in c [closed]c中的数据类型混淆[关闭]
【发布时间】:2013-09-16 15:58:55
【问题描述】:

数组是 c 中的数据类型吗? 如果是,我们可以像在结构体中一样创建数组类型的变量,枚举。

 int arr[10] ;//is this arr is a data type of 10 ints

【问题讨论】:

标签: c abstract-data-type


【解决方案1】:

数组是C中的一种数据类型吗?

没有进一步说明的“数组”不是一个单独的数据类型,但是一旦你指定了它的大小和它的元素类型,它就变成了一个数据类型。换句话说,您不能定义一个采用“任何东西的数组”或“没有特定大小的特定类型的数组”的类型,但您可以定义一个数据类型,它是 N 类型的 @ 项目的数组987654322@.

如果可以,我们可以像structs、enum那样创建数组类型的变量吗?

int arr[10] ;//is this arr is a data type of 10 ints

是的,是的。你可以通过检查sizeof(arr) 来判断:它将是sizeof(int) 的十倍。

【讨论】:

  • “数组”不是数据类型; “整数数组”和“大小 10 整数数组”是数据类型。
  • @mpez0 已编辑。谢谢!
【解决方案2】:

数组是derived type,如果我们查看C99 draft standard 部分6.2.5 Types 段落20 说(强调我的):

任何数量的派生类型都可以从对象、函数和 不完整的类型,如下:

数组类型描述了一组连续分配的非空对象 特定的成员对象类型,称为元素类型。36) 数组类型是 以它们的元素类型和数组中元素的数量为特征。一个 数组类型被认为是从它的元素类型派生的,如果它的元素类型是 T,那么 数组类型有时被称为“T 数组”。数组类型的构造从 元素类型称为“数组类型推导”。

您可以创建结构和枚举的数组,唯一的例外在脚注36中注明:

由于对象类型不包含不完整类型,因此无法构造不完整类型的数组。

【讨论】:

    【解决方案3】:

    当然,一种数据类型的数组是另一种数据类型。

    你可以这样做:

    typedef int intarr3_t[3];
    
    intarr3_t intarr = {1, 2, 3};
    

    【讨论】:

      【解决方案4】:

      是的,它是一种数据类型吗?是的,您可以制作多个。

      为了更清楚,可以对数组进行typedef。

      typedef char MyType_t [10];
      

      将使 MyType_t 成为 10 个字符的数组:

      MyType arrayOfTenChars;
      

      【讨论】:

      • 在 MyType_t 中,下划线 t 是必不可少的。
      • 不,实际上它应该只为库类型保留,这正是我 20 年来一直这样做的方式。
      【解决方案5】:

      数组的概念与派生类型有关。然后还有array of intarray of 10 intsdata类型。

      【讨论】:

        猜你喜欢
        • 2017-12-24
        • 2017-08-14
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 1970-01-01
        • 2015-12-08
        • 2018-08-01
        相关资源
        最近更新 更多