我有一个函数可以抓取给定整数数组中的不同数字。我将不同的数字存储在另一个数组中,但我想访问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
?
答案 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;