1

这是我使用 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;
}
4

1 回答 1

1

allocation如果没有功能本身的合作,这不能以可移植的方式完成。

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

在某些实现中您可能会使用一些技巧,但是,如果您要学习该语言,您最好学习正确的语言,而不是依赖那些在任何地方都不起作用的技巧。

如果允许您以某种方式更改功能,我会研究如下内容: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.

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

于 2013-09-11T04:16:43.247 回答