首页 > 解决方案 > 静态指针

问题描述

我的作业有问题,我想知道你是否可以帮助我。这是我的代码:

#include <stdio.h>
#define ARRSIZE 1000

int main(){
    f1();
    f2();
    f3();
    return 0;
}

void f1(){
    static int n;
    n++;
    char arr[ARRSIZE];
    static long int *addr=arr;
    printf("Call #%d at %d\n",n,addr);

    if(n<10)
        f1();
}

void f2(){

}

void f3(){

}

这是错误:

error: initializer element is not constant

谢谢你。

标签: cpointers

解决方案


您不能使用局部变量初始化静态变量,因为初始化程序必须是常量(它实际上是在程序启动时初始化的,而不是在调用函数时,就像全局静态变量一样)。

您可以做的是将其初始化为NULL,并在您的代码中检查这一点。第一次调用该函数时,它将具有此值,您可以重新分配它。这个新值将在调用中保留,因此不会在后续调用中更新。

void f1(){
    static int n;
    n++;
    char arr[ARRSIZE];
    static long int *addr = NULL;
    if (addr == NULL) {
        addr = arr;
    }
    printf("Call #%d at %d\n",n,addr);

    if(n<10)
        f1();
}

推荐阅读