我有一个数组 int arr[5]
,它被传递给一个函数 fillarr(int arr[])
:
int fillarr(int arr[])
{
for(...);
return arr;
}
- 我如何返回这个数组?
- 如果我返回一个指针,我将如何访问它?
如上所述路径是正确的。但我认为,如果我们只返回一个函数的本地数组变量,有时它会返回垃圾值作为其元素。
为了避免这种情况,我不得不动态创建数组并进行操作。就像这样:
int* func()
{
int* Arr = new int[100];
return Arr;
}
int main()
{
int* ArrResult = func();
cout << ArrResult[0] << " " << ArrResult[1] << endl;
return 0;
}
还有什么问题吗:
int (*func())
{
int *f = new int[10] {1,2,3};
return f;
}
int fa[10] = { 0 };
auto func2() -> int (*) [10]
{
return &fa;
}
来源:https://www.tutorialspoint.com/cplusplus/cpp_return_arrays_from_functions.htm
C++不允许将整个数组作为参数返回给函数。但是,您可以通过指定数组名称而不使用索引来返回指向数组的指针。
int * myFunction() { . . . }
将这些规则应用于当前问题,我们可以编写以下程序:
# include <iostream>
using namespace std;
int * fillarr( );
int main ()
{
int *p;
p = fillarr();
for ( int i = 0; i < 5; i++ )
cout << "p[" << i << "] : "<< *(p + i) << endl;
return 0;
}
int * fillarr( )
{
static int arr[5];
for (int i = 0; i < 5; ++i)
arr[i] = i;
return arr;
}
输出将是:输出将是:
p[0]=0
p[1]=1
p[2]=2
p[3]=3
p[4]=4
#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';
}
运行它,你就会看到变化
y
本身作为自身的副本传递,但因为它是一个指针,所以您将直接操作数组。请编辑您的答案。 - hellow#include <iostream>
using namespace std;
int *ReturnArray(int arr[], int size)
{
static int MinMax[2] = {0, 0}; // must use static, else address would be deleted after the return is reached
MinMax[0] = arr[0];
MinMax[1] = arr[size - 1];
return MinMax;
}
int main()
{
int arr[] = {1, 2, 3};
int size = sizeof(arr) / sizeof(*arr);
int *ans; // pointer to hold returned array
ans = ReturnArray(arr, size); // only pointer can receive the return, not an array
cout << "Min: " << ans[0] << " Max: " << ans[1];
return 0;
}
template<typename T, size_t N>
using ARR_REF = T (&)[N];
template <typename T, size_t N>
ARR_REF<T,N> ArraySizeHelper(ARR_REF<T,N> arr);
#define arraysize(arr) sizeof(ArraySizeHelper(arr))
为什么不将数组作为参数“返回”?
fillarr(int source[], size_t dimSource, int dest[], size_t dimDest)
{
if (dimSource <= dimDest)
{
for (size_t i = 0; i < dimSource; i++)
{
//some stuff...
}
}
else
{
//some stuff..
}
}
或者...以更简单的方式(但您必须知道尺寸...):
fillarr(int source[], int dest[])
{
//...
}
int *arr(int size)
{
int *A;
A = new int[size];
for (int i = 0; i < size; i++)
{
A[i] = i + 1;
}
return A;
}
int main()
{
int size = 5;
int *A = arr(size);
return 0;
}
#include<iostream>
using namespace std;
char *func(int n)
{
// char a[26]; /*if we use this then an error will occur because you are
// returning address of a local variable*/
static char a[26];
char temp='A';
for(int i=0;i<n;i++)
{
a[i]=temp;temp++;
}
return a;
}
int main()
{
int n=26;
char *p=func(n);
for(int i=0;i<n;i++)
cout<<*(p+i)<<" ";
//or you can also print like this
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
}
这是一个完整的例子,需要解决这种问题
#include <bits/stdc++.h>
using namespace std;
int* solve(int brr[],int n)
{
sort(brr,brr+n);
return brr;
}
int main()
{
int n;
cin>>n;
int arr[n];
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
int *a=solve(arr,n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<endl;
}
return 0;
}
5
会被编译器丢弃。 - David Rodríguez - dribeasvoid foo( int (&array)[5] );
(将一个包含5个整数的数组作为引用传递)。当你通过引用传递时,在函数内部得到的是对实际类型的引用。另一方面,void foo(int array[5])
在函数定义期间被编译器转换为void foo(int*)
。调用foo(myarray)
会导致数组衰变为指向第一个元素的指针。 - David Rodríguez - dribeas