我有以下代码段:
#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不变吗?
编辑: 问题:如何在函数中设置静态变量的值(如果未设置)?
答案 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);
}