c中返回一个数组

本文概述

  • 什么是数组?
什么是数组?数组是一种数据结构,用于存储固定大小的同类数据集合。简而言之,我们可以说数组是相同类型的变量的集合。
例如,如果我们要声明n个变量n1,n2 … n。,如果我们分别创建所有这些变量,那么它将变得非常繁琐。在这种情况下,我们创建具有相同类型的变量数组。可以使用元素的索引访问数组的每个元素。
首先让我们看看如何将一维数组传递给函数。

#include < stdio.h> 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 []的所有元素。
输出量
c中返回一个数组

文章图片
将数组作为指针传递给函数
现在,我们将看到如何将数组作为指针传递给函数。
#include < stdio.h> 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()打印数组的元素。
【c中返回一个数组】输出量
c中返回一个数组

文章图片
注意:从以上示例中,我们观察到数组作为参考传递给函数,这意味着数组也保留在函数外部。如何从函数返回数组
返回指向数组的指针
#include < stdio.h> 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()函数,并且堆栈中的所有变量均被释放。因此,可以说该程序正在返回已经取消分配的内存位置,因此该程序的输出是分段错误。
输出量
c中返回一个数组

文章图片
有三种将数组返回到函数的正确方法:
  • 使用动态分配的数组
  • 使用静态数组
  • 使用结构
c中返回一个数组

文章图片
通过将要作为参数返回的数组传递给函数来返回数组。
#include < stdio.h> 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; }

输出量
c中返回一个数组

文章图片
使用malloc()函数返回数组。
#include < stdio.h> #include< malloc.h> 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< size; i++) { scanf("%d", & p[i]); } return p; } int main() { int *ptr; ptr=getarray(); int length=sizeof(*ptr); printf("Elements that you have entered are : "); for(int i=0; ptr[i]!='\0'; i++) { printf("%d ", ptr[i]); } return 0; }

输出量
c中返回一个数组

文章图片
使用静态变量
#include < stdio.h> 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’ 的实际存储位置。
输出量
c中返回一个数组

文章图片
使用结构

#include < stdio.h> #include< malloc.h> 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; }

输出量
c中返回一个数组

文章图片

    推荐阅读