数组大小声明为[N + 1]

时间:2015-02-18 01:54:16

标签: c arrays

代码定义了这样的数组 -

#define N 100 
long int mid[N+1]

这里是否mid[N+1]=mid[100+1]mid[101]? 另外我想知道我们可以将2个元素的数组声明为int n[1+1]吗?

3 个答案:

答案 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 数组。