从main()访问函数内部的静态变量而不使用C ++中的类

时间:2013-09-11 04:11:20

标签: c++ arrays pointers

这是使用C ++的面向对象编程类的赋值。在这个程序中,我需要能够访问另一个函数在一个函数中初始化的静态指针。更具体地说,我希望能够从“输入”功能访问在“分配”功能中初始化的指针x。在任何人问之前,我不允许使用任何全局变量。

#include <iostream>
using namespace std;

void allocation()
{
    static int *pointerArray[3];
    static int **x = &pointerArray[0];
}

bool numberCheck(int i)
{
    if(i >= 0)
    {
        return true;
    }
    else
    {
        return false;
    }
}

void input()
{
    int input1,input2;
    cout << "Input two non-negative integers.\n";

    cin >> input1;
    while(!numberCheck(input1))
    {
        cout << "You typed a non-negative integer. Please try again.\n";
        cin >> input1;
    }
    cin >> input2;
    while(!numberCheck(input2))
    {
        cout << "You typed a non-negative integer. Please try again\n";
        cin >> input2;
    }
    // Here I'd like to access pointer x from the allocation function 
}


int main()
{
    allocation();
    input();    
    return 0;
}

1 个答案:

答案 0 :(得分:1)

如果没有allocation函数本身的合作,就无法以便携方式完成。

作用域规则阻止在实际x函数之外使用allocation。它的持续时间可能在函数之外(是静态的),但其范围(即其可见性)不是。

你可以在某些实现中使用 hacks ,但是,如果你要学习这门语言,你最好先学习一门语言,而不是依靠不起作用的技巧。无处不在。

如果您被允许以某种方式更改 allocation功能,我会查看类似的内容:

void allocation (int ***px) {
    static int *pointerArray[3];
    static int **x = &pointerArray[0];
    *px = x;
}
:
int **shifty;
allocation (&shifty);
// Now you can get at pointerArray via shifty.

至少在不使用全局的情况下是可移植的,但我怀疑它也不会被禁止。