c++将指针传递到函数中,用于将int数组从函数中传递出去并传递到函数
c++ passing Pointers into a function, for passing int arrays out of and into a function
我正在尝试传递一个int数组。下面是我想做的一个例子。基本上,我可以写一个函数,通过返回指针来返回int数组。现在我想把这个函数作为另一个函数的参数。目标是让一个函数创建一个int数组,然后进入另一个将int数组作为输入的函数。它不起作用。在使用int*指针的函数中,int*指针只变为-8435432,并且在将其分配给另一个int*指针后无法读取其元素。我不明白。为什么我可以从一个函数中得到一个int数组,但它不能用作另一个函数的输入?
int * returnIntArray()
{
int * thePointer;
int j[3];
thePointer = j;
j[0] = 1;
j[1] = 3;
j[2] = -1;
return thePointer;
}
//
int * takesTheIntArray(int * anIntArray)
{
int x,y,z;
int * returnIt;
returnIt = anIntArray;
x = returnIt[0];
y = returnIt[1];
z = returnIt[3];
return returnIt;
}
int _tmain(int argc, _TCHAR* argv[])
{
int y,z,p;
int * x;
x = returnIntArray();
y = x[0];
z = x[1];
x = takesTheIntArray(returnIntArray());
cout << x[0] << ", " << x[1];
//cout << theVector[1];
cout << "hello";
}
int * thePointer;
int j[3];
thePointer = j;
应为:
int* thePointer = new int[3];
第一个版本的问题是,您返回的是静态分配的(在堆栈上分配的)东西。当函数返回时,它将超出范围。在第二个版本中,它是动态分配的(在堆上分配)。完成后,请记住在指针上调用delete[]
(否则会泄漏内存)。
您可以重写returnIntArray()如下:
int * returnIntArray()
{
static int j[3];
j[0] = 1;
j[1] = 3;
j[2] = -1;
return j;
}
您不需要只隐藏j是在作用域末尾销毁的局部变量这一事实的"指针"变量。您可能尝试不使用"Pointer"变量,并获得"警告C4172:返回本地变量或临时地址",这意味着返回后返回的值将无效(与Pointer存在的问题相同)。静态before j声明使j成为全局的(但只能通过其在函数中的名称获得),因此j包含的值不会在作用域末尾丢失。
我不明白"takesIntArray"的目的是什么——也许是为了在调试器中查看x、y、z值?如果是这种情况,您不需要复制指针,只需执行以下操作即可:
//
int * takesTheIntArray(int * anIntArray)
{
int x,y,z;
x = anIntArray[0];
y = anIntArray[1];
z = anIntArray[2];
return anIntArray;
}
保留你的主菜单,这应该可以随心所欲:)[edit]我在转发时没有注意到"takesIntArray"中有一个拼写错误:z var的anIntArray索引应该是2,而不是3[/edit]
相关文章:
- 第 i 个元素返回 i 的函数数组
- 使用嵌套函数数组是个好主意吗?
- 正确实现类函数数组
- 试图引用已删除函数数组的相等运算符
- 如何在静态函数中使用成员函数数组
- 无法创建函数数组
- 构造函数数组
- 使用开关或定义函数数组 - 更快
- 编写一个函数,该函数将覆盖主函数数组中的值
- 可以像'funs[1]();'一样调用的函数数组
- std::AVX内部函数数组
- 如果数组大小未知,如何将函数数组作为参数传递
- 从函数数组中获取值
- 使用元编程在编译时初始化函数数组
- 将C函数数组转换为C++函数指针数组
- 复制构造函数 [数组] C++
- 添加函数数组并随机选择其中一个
- 指针到私有成员函数数组
- 可以单独声明函数数组的元素
- (c++)将main中的随机值保存到函数数组中