代码定义了这样的数组 -
#define N 100
long int mid[N+1]
这里是否mid[N+1]=mid[100+1]
,mid[101]
?
另外我想知道我们可以将2个元素的数组声明为int n[1+1]
吗?
答案 0 :(得分:2)
从第二个问题开始,是的,您可以声明类似mid[2+1]
的内容,因为您声明了一个文字大小的数组(3是文字),而不是可变大小。
带给我们第一个问题。是的,它是一样的。在编译的早期阶段,编译器获取代码中的所有定义并将它们“扩展”为定义的值或表达式,因此mid[N+1]
逐字转换为mid[100+1]
。
请注意,N
此处是定义的值而不是变量。如果mid[N+1]
是变量,则不能声明N
(我想是在C99之前)。
答案 1 :(得分:0)
#define N 100
long int mid[N+1]
这完全有效(除了丢失的分号),相当于
long int mid[101];
数组的长度可以是具有正值的任何整数常量表达式。它不必是整数常量(文字)。
类似地,
int n[1+1];
相当于
int n[2];
(在块作用域中,没有static
关键字定义的数组可以具有可变长度,可以由任何整数表达式指定。(如果表达式的值不为正,则行为未定义。 )C90中不允许使用可变长度数组;它们是在C99中引入的,C11对它们的支持是可选的,因此并非所有编译器都支持它们。)
答案 2 :(得分:-1)
你可以像这样声明数组,数组大小应该是正数。
#define N 100
long int mid[N+1]
如果你想使用长度为N + 1的数组, 你也可以使用 malloc
malloc();
例如
#define N 100
long int* mid;
int main()
{
mid = malloc((N+1)*sizeof(long int));
return 0;
}
因此,您可以访问 101 大小的 mid 数组。