如果在我的计划中,我有这个:
int arr[some_number];
some_number
的类型是什么?
long
,unsigned long
等)这可能是一个假设的问题(假设我可以在编译时根据需要分配尽可能多的内存),只是想知道some_number
的类型是否总是整数。
* *编辑 如果我的语言不清楚,在sizeof(整数)是2个字节的系统上,我定义如下数组:
int arr [65537],将“65537”溢出并且它是有效的,int arr [-1]?
答案 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
,则必须评估为不变的内容。