如何在C中初始化静态指针?

时间:2010-01-29 18:05:11

标签: c static pointers

我想在函数中使用静态指针以指向多个整数。编程时尚不知道整数的数量,但在首先使用该函数之前,它在运行时是已知的。所以我想给函数一个参数n并告诉它为指针分配n个整数的内存空间并保留它。但是,我了解到静态变量必须在它们的声明中启动,这似乎不起作用,因为一方面我需要*将它们声明为指针,另一方面我需要变量名而不用*来分配记忆。对于静态指针,正确的声明和初始化是什么?我正在努力节省时间,否则任何我能买得起的计算机都需要多年才能完成我的程序。当我了解到局部变量比全局变量更快时,指针有时比我正在试验的数组更快。即使在较小的测试运行中,该功能也会被使用数十亿次,因此欢迎任何加速它的想法。指针的使用也应该使程序中的某些函数更好地协同工作,但如果它们是本地的并且每次调用函数时都被初始化,我不希望它真的很快。

3 个答案:

答案 0 :(得分:3)

像这样:

void foo() {
    static int* numbers = NULL;
    if (numbers == NULL) {
        // Initialize them
    }
}

为并发问题做好准备。为什么不使它成为一个全局的并具有正确的init_numbers()和user_numbers()函数,以便您控制init何时发生?

答案 1 :(得分:1)

我会尝试这样的事情:

void my_proc(int n)
{
    static int* my_static_pointer(0);

    if (my_static_pointer == 0)
    {
        my_static_pointer = malloc(sizeof(int) * n);
    }

    // check the allocation worked and use the pointer as you see fit
}

答案 2 :(得分:0)

您可以将指针初始化为null并稍后重复使用。