我有一个数组int arr[5],传递给一个函数fillarr(int arr[]):
int fillarr(int arr[])
{
for(...);
return arr;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
我有一个数组int arr[5],传递给一个函数fillarr(int arr[]):
int fillarr(int arr[])
{
for(...);
return arr;
}
我如何返回那个数组? 我将如何使用它,比如我返回了一个指针我将如何访问它?
当前回答
这样的:
int fillarr(int arr[])
实际上与:
int fillarr(int *arr)
如果你真的想返回一个数组你可以把这行改为
int * fillarr(int arr[]){
// do something to arr
return arr;
}
它并不是真正返回一个数组。方法的开头返回一个指针 数组的地址。
但是记住,当你传递数组时,你只是传递了一个指针。 当你修改数组数据时,你实际上是在修改数据 指针指向。因此,在传入数组之前,必须意识到 你在外面已经有了修改后的结果。
e.g.
int fillarr(int arr[]){
array[0] = 10;
array[1] = 5;
}
int main(int argc, char* argv[]){
int arr[] = { 1,2,3,4,5 };
// arr[0] == 1
// arr[1] == 2 etc
int result = fillarr(arr);
// arr[0] == 10
// arr[1] == 5
return 0;
}
我建议你可以考虑在fillarr函数中加入一个长度 这一点。
int * fillarr(int arr[], int length)
这样你就可以使用length来填充数组的长度,不管它是什么。
正确地使用它。你可以这样做:
int * fillarr(int arr[], int length){
for (int i = 0; i < length; ++i){
// arr[i] = ? // do what you want to do here
}
return arr;
}
// then where you want to use it.
int arr[5];
int *arr2;
arr2 = fillarr(arr, 5);
// at this point, arr & arr2 are basically the same, just slightly
// different types. You can cast arr to a (char*) and it'll be the same.
如果您只想将数组设置为一些默认值,请考虑使用 内置memset功能。
喜欢的东西: Memset ((int*)&arr, 5, sizeof(int));
当我谈到这个话题的时候。你说你在用c++。看一下如何使用stl向量。您的代码可能会更加健壮。
有很多教程。这里有一个可以告诉你如何使用它们。 http://www.yolinux.com/TUTORIALS/LinuxTutorialC++STL.html
其他回答
还有:
int (*func())
{
int *f = new int[10] {1,2,3};
return f;
}
int fa[10] = { 0 };
auto func2() -> int (*) [10]
{
return &fa;
}
在这种情况下,数组变量arr实际上也可以通过隐式转换被视为指向内存中数组块开头的指针。你正在使用的语法:
int fillarr(int arr[])
有点像语法糖。你真的可以用这个替换它,它仍然可以工作:
int fillarr(int* arr)
所以在同样的意义上,你想从你的函数返回的实际上是一个指向数组中第一个元素的指针:
int* fillarr(int arr[])
你仍然可以像使用普通数组一样使用它:
int main()
{
int y[10];
int *a = fillarr(y);
cout << a[0] << endl;
}
实际上,当你在函数中传递一个数组时,指向原始数组的指针被传递到函数形参中,因此对该函数中数组所做的更改实际上是在原始数组上进行的。
#include <iostream>
using namespace std;
int* func(int ar[])
{
for(int i=0;i<100;i++)
ar[i]=i;
int *ptr=ar;
return ptr;
}
int main() {
int *p;
int y[100]={0};
p=func(y);
for(int i=0;i<100;i++)
cout<<i<<" : "<<y[i]<<'\n';
}
运行它,您将看到更改
为了从函数返回一个数组,让我们在结构中定义该数组; 它看起来是这样的
struct Marks{
int list[5];
}
现在让我们创建类型结构的变量。
typedef struct Marks marks;
marks marks_list;
我们可以通过以下方式将array传递给一个函数并为其赋值:
void setMarks(int marks_array[]){
for(int i=0;i<sizeof(marks_array)/sizeof(int);i++)
marks_list.list[i]=marks_array[i];
}
我们也可以返回数组。要返回数组,函数的返回类型应该是结构类型即标记。这是因为在现实中,我们传递的是包含数组的结构。最终的代码可能是这样的。
marks getMarks(){
return marks_list;
}
int *fillarr(int arr[])
你仍然可以使用结果like
int *returned_array = fillarr(some_other_array);
if(returned_array[0] == 3)
do_important_cool_stuff();