我需要修改 modifyAA(int a)功能中的 pTab 数组。 我怎样才能做到这一点?
示例代码:
int modifyAA(int a);
int main()
{
*pTab=new int[10]; int a=13;
for(int i=0;i<=9;i++)
pTab[i]=88;
modifyAA(a);
//I'd like to have pTab to be modified after function invoke
return 0;
}
modifyAA(int a){
for(int i=0;i<=9;i++)
pTab[i]=pTab[i]+1;
a=a+pTab[0];
return a;
};
当函数不将其作为参数时,是否可以修改数组?
答案 0 :(得分:3)
您可以将全局变量用于指向动态数组的第一个元素的指针:
int * pTab;
int printAA(int a)
{
for (unsigned int i = 0 i != 10; ++i)
{
++pTab[i];
}
return a + pTab[0];
}
int main()
{
pTab = new int[10];
// populate
printAA(13);
}
答案 1 :(得分:1)
如果您要执行此操作“C ++方式”,您可以使用stdlib中的vector
和迭代器,如下所示:
#include <vector>
typedef std::vector<int> PTab; // Defines a type for your pTab, it's a vector of integers
int printAA(PTab::iterator from, PTab::iterator until, int a); //declaring some func
int main()
{
PTab pTab(10, 88); // Initializes pTab vector to 10 elements all containing 88
int a = 0;
printAA(pTab.begin(), pTab.begin() + 10, a);
return 0;
}
int printAA(PTab::iterator from, PTab::iterator until, int a)
{
for (PTab::iterator i = from; i != until; ++i)
{
*i++; // Increments current element by 1
}
a += *from; // Adds the value of the from element to a
return a;
};
这样你就不会将向量本身传递给函数,相反,你只传递一系列迭代器,这使得函数可以访问向量的内容,但不能修改向量对象本身(即清除,调整大小等。)。
答案 2 :(得分:1)
您可以使用全局变量。如果像printAA()
这样的函数需要调用它,这可能是实用的。
但是,在分配之前使用* pTab存在风险。而且,你现在还记得大小,但如果以后你将大小改为10,那么你必须找回所有你硬编码10或9的地方。
如果不传递参数的目的主要是因为你多次调用函数,你可以选择std::bind
,创建一种动态函数:
#include <iostream>
#include <functional>
int printDynArr(int* dynarr, size_t sz, int a) // proper function with all parameters
{
for (size_t i = 0; i < sz; i++)
dynarr[i]++; // It's a pointer, so you modify the data where it is stored
a += dynarr[0];
return a;
};
int main()
{
int *pTab = new int[10]; int a = 13; //declaring and alocating - dynamic array
auto printAA = std::bind<int>(printDynArr, pTab, 10, std::placeholders::_1); // dynamic function shortcut with predefind parameters
...
printAA(a); //using function without giving pTab as argument.
std::cin.get();
return 0;
}