在数组初始化期间键入

时间:2011-08-29 10:01:56

标签: c unix

如果在我的计划中,我有这个:

int arr[some_number];

some_number的类型是什么?

  1. 整数?
  2. 无符号整数?
  3. 自动确定(longunsigned long等)
  4. 这可能是一个假设的问题(假设我可以在编译时根据需要分配尽可能多的内存),只是想知道some_number的类型是否总是整数。

    * *编辑 如果我的语言不清楚,在sizeof(整数)是2个字节的系统上,我定义如下数组:

    int arr [65537],将“65537”溢出并且它是有效的,int arr [-1]?

6 个答案:

答案 0 :(得分:4)

some_number必须是实际的正整数,如: -

int arr[1024]

或者它可以是一个解析为正整数的MACRO: -

#DEFINE some_number 1024
int arr[some_number]

由于解释是在编译时完成的,并且没有使用程序变量,因此没有“类型”。

答案 1 :(得分:2)

默认情况下,在C中,数字的类型为int。您可以使用后缀u使其成为无符号整数,后缀l使其成为long(并使用某些编译器后缀ll使其成为{ {1}},即64位整数。

答案 2 :(得分:0)

表达式的类型不依赖于上下文,因此some_number(实际上为some_expression)的类型与在数组定义中不使用的类型相同。另一个问题是允许指定数组大小的表达式类型。

答案 3 :(得分:0)

我认为它属于size_t类型,它可能因平台而异。它没有签名,这是肯定的。请看this

答案 4 :(得分:0)

some_number必须为TRUE常量,不能变量。 例如

 main()
{
int a=1;
int kk[a]={1};
}

这会导致错误说

 variable-sized object may not be initialized

但我们也不能使用

int const a;

作为数组下标beacuse const不被视为C中的真常量。

答案 5 :(得分:0)

假设这是函数内部的定义,some_number可以是具有严格正值的任何整数表达式。如果它是非常数,那么野兽被称为可变长度数组,VLA。

如果您将其放在外部范围内或将其设为static,则必须评估为不变的内容。