在C ++中访问函数外部的数组

时间:2015-10-14 01:59:47

标签: c++ arrays

我有一个函数可以抓取给定整数数组中的不同数字。我将不同的数字存储在另一个数组中,但我想访问getUncommon之外的不同数字,以便我可以进行一些比较和排序。

如果不在C ++中使用全局变量,这是否可行?

#include <iostream>

using namespace std;

void getUncommon(int* iAry, int size) {
    const int size2 = 10;
    int* tmpAry = new int[size2];
    int totalCount[size2] = { 0 };
    int currentCount[size2] = { 0 };
    int totalUncommon = 0;
    int i, j;
    int rareDigits[size2] = { 0 };

    for (i = 0; i < size; i++) {
        tmpAry[i] = iAry[i];
        if (tmpAry[i] < 0)
            tmpAry[i] *= -1;

        for (j = 0; j < size2; j++)
            currentCount[j] = 0;

        if (tmpAry[i] == 0) {
            currentCount[0] = 1;
        }

        while (tmpAry[i] / 10 != 0 || tmpAry[i] % 10 != 0){
            currentCount[tmpAry[i] % 10] = 1;
            tmpAry[i] /= 10;
        }

        for (j = 0; j < size2; j++) {
            totalCount[j] += currentCount[j];
        }
    }

    for (i = 0; i < size2; i++) {
        if (totalCount[i] == 1) {
            totalUncommon++;
        }
    }

    cout << "Total of uncommon digits: " << totalUncommon << endl
        << "Uncommon digits:\n";
    if (totalUncommon == 0) {
        cout << "\nNo uncommon digits found.";
    }
    else {
        for (i = 0; i < size2; i++) {
            if (totalCount[i] == 1) {
                cout << i << endl;
                rareDigits[i] = totalCount[i];
            }
        }
    }
    return;
}

int getNumRareDigits(int x) {
    // I would like to access rareDigits
    // so that I can pass in an integer
    // and see if it contains rareDigits[i] to
    // find the total number of rare digits.
}

int main(){
    int* my_arry;
    int size;
    int i;

    cout << "How many integers? ";
    cin >> size;

    for (i = 0; i < size; i++) {
        cout << "Enter values #" << i << " : ";
        cin >> size;
    }


    cout << "\nThe original array:" << endl;
    for (i = 0; i < size; i++) {
        cout << my_arry[i] << endl;
    }

    cout << "\nCalling function -\n" << endl;

    getUncommon(my_arry, size);


    return 0;
}

如何在rareDigits[i]之外访问getUncommon

2 个答案:

答案 0 :(得分:1)

如果我正确理解您的问题,问题的真正核心是您想要从外部范围访问本地变量。如果不使用全局,您的主要方法是传入要填充的数组。

例如,getUncommon现在可能如下所示:

void getUncommon(int* iAry, int size, int* rare, int rareSize) { ...

现在你可能需要考虑的问题是,如果&#34;罕见&#34;数组的大小不是预先知道的。要解决这个问题,你可能要么使用int **(在getUncommon中分配数组),要么更可能使用类似std :: vector&amp;的东西。

答案 1 :(得分:0)

可以通过参考传递。

void getUncommon(int* iAry, int size, int *outArr, int &outSize) //&outSize make it pass by reference
{
    outArr[0] = 1;
    outArr[1] = 2;
    outSize = 2;   //Address of outSize and address of outSz same, so they both hold same value
}

int main()
{

    int my_arry[10], outArr[10];
    int outSz, size;

    getUncommon(my_arry, size, outArr, outSz);
    cout<<outSz<<endl;
    for(int i=0; i<outSz; i++)
    {
        cout<<outArr[i]<<" ";
    }


    return 0;
}

此处outArr应填写getUncommon函数,并通过outSz返回数组大小。

您的代码还有一些显示UB 的问题。

您将指针声明为

int* my_arry;

但你没有分配内存。要分配内存,您可以使用

my_arry = new int[10];

使用释放内存后

delete []my_arry;