C - 如果未设置,则设置静态变量的值

时间:2016-04-23 20:16:26

标签: c gcc static-variables

我有以下代码段:

#include<stdio.h>
void read(int a[ ],int n)
{
      static int p=n;
      if(n!=0)
       {
           printf("enter element %d: ",p-n);
           scanf("%d",&a[p-n]);
           read(a,n-1);
        }
}
int main()
{
   int a[10],n;
   printf("enter n: ");
   scanf("%d",&n);
   read(a,n);
}

我一直得到error: initializer element is not constant。 函数编译时不是n不变吗?

编辑: 问题:如何在函数中设置静态变量的值(如果未设置)?

4 个答案:

答案 0 :(得分:4)

这是因为您无法使用另一个变量初始化static变量,只能使用可在编译时确定的常量值 ,例如宏,文字等

答案 1 :(得分:2)

绝对不是;编译器如何知道在编译时将n分配给哪个值?

答案 2 :(得分:2)

  

我不断收到错误:初始化元素不是常量。

全局变量和静态变量只能使用编译时已知的常量表达式进行初始化。

  

函数编译时不是n不变吗?

答案是否定的。 n存储从stdin收到的值。因此,它在运行时接收值。

答案 3 :(得分:1)

修改:仅当p未设置时,解决方案才会将n分配给p

解决方案:

#include<stdio.h>
static int p;
void read(int a[ ],int n)
{
    //p=n; //to change n on each call 
    if(!p) p = n; //to change n only if p is unset
      if(n!=0)
       {
           printf("enter element %d: ",p-n);
           scanf("%d",&a[p-n]);
           read(a,n-1);
        }
}
int main()
{
    int a[10],n;
    printf("enter n: ");
    scanf("%d",&n);
    read(a,n);
}