📜  C返回数组

📅  最后修改于: 2020-10-22 01:28:18             🧑  作者: Mango

用C返回一个数组

什么是数组?

数组是一种数据结构,用于存储固定大小的同类数据集合。简而言之,我们可以说数组是相同类型的变量的集合。

例如,如果我们要声明n个变量n1,n2 … n。如果我们单独创建所有这些变量,那么这将变得非常繁琐。在这种情况下,我们创建具有相同类型的变量数组。可以使用元素的索引访问数组的每个元素。

首先让我们看看如何将一维数组传递给一个函数。

#include 
void getarray(int arr[])
{
    printf("Elements of array are : ");
    for(int i=0;i<5;i++)
    {
        printf("%d ", arr[i]);
    }
}
int main()
{
   int arr[5]={45,67,34,78,90};
   getarray(arr);
   return 0;
}

在上面的程序中,我们首先创建了数组arr [],然后将其传递给函数getarray()。 getarray()函数输出数组arr []的所有元素。

输出量

将数组作为指针传递给函数

现在,我们将看到如何将数组作为指针传递给函数。

#include 
void printarray(char *arr)
{
    printf("Elements of array are : ");
    for(int i=0;i<5;i++)
    {
        printf("%c ", arr[i]);
    }
}
int main()
{
  char arr[5]={'A','B','C','D','E'};
  printarray(arr);
  return 0;
}

在上面的代码中,我们将数组作为指针传递给了函数。函数printarray()打印数组的元素。

输出量


注意:从以上示例中,我们观察到将数组作为引用传递给函数,这意味着数组也保留在函数之外。

如何从函数返回数组

返回指向数组的指针

#include 
int *getarray()
{
    int arr[5];
    printf("Enter the elements in an array : ");
    for(int i=0;i<5;i++)
    {
        scanf("%d", &arr[i]);
    }
    return arr;
}
int main()
{
  int *n;
  n=getarray();
  printf("\nElements of array are :");
  for(int i=0;i<5;i++)
    {
        printf("%d", n[i]);
    }
    return 0;
}

在上面的程序中,getarray()函数返回变量’arr’。它返回一个局部变量,但它是要返回的非法内存位置,该位置在堆栈中的函数内分配。由于程序控制返回到main()函数,并且堆栈中的所有变量都被释放。因此,可以说该程序正在返回已经取消分配的内存位置,因此该程序的输出是分段错误。

输出量

有三种将数组返回到函数的正确方法:

  • 使用动态分配的数组
  • 使用静态数组
  • 使用结构

通过将要作为参数返回的数组传递给函数来返回数组。

#include 
int *getarray(int *a)
{
  
    printf("Enter the elements in an array : ");
    for(int i=0;i<5;i++)
    {
        scanf("%d", &a[i]);
    }
    return a;
}
int main()
{
  int *n;
  int a[5];
  n=getarray(a);
  printf("\nElements of array are :");
  for(int i=0;i<5;i++)
    {
        printf("%d", n[i]);
    }
    return 0;
}

输出量

使用malloc()函数返回数组。

#include 
#include
int *getarray()
{
    int size;
    printf("Enter the size of the array : ");
    scanf("%d",&size);
    int *p= malloc(sizeof(size));
    printf("\nEnter the elements in an array");
    for(int i=0;i

输出量

使用静态变量

#include 
int *getarray()
{
  static int arr[7];
  printf("Enter the elements in an array : ");
  for(int i=0;i<7;i++)
  {
      scanf("%d",&arr[i]);
  }
  return arr;
    
}
int main()
{
  int *ptr;
  ptr=getarray();
  printf("\nElements that you have entered are :");
  for(int i=0;i<7;i++)
  {
      printf("%d ", ptr[i]);
  }
}

在上面的代码中,我们在getarray()函数中将变量arr []创建为静态变量,该变量在整个程序中都可用。因此,函数getarray()返回变量’arr’的实际存储位置。

输出量

使用结构

#include 
#include
struct array
{
    int arr[8];
};
struct array getarray()
{
    struct array y;
    printf("Enter the elements in an array : ");
    for(int i=0;i<8;i++)
    {
        scanf("%d",&y.arr[i]);
    }
    return y;
}
int main()
{
  struct array x=getarray();
  printf("Elements that you have entered are :");
  for(int i=0;x.arr[i]!='\0';i++)
  {
      printf("%d ", x.arr[i]);
  }
    return 0;
}

输出量