本文概述
- 什么是数组?
例如,如果我们要声明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 []的所有元素。
输出量
文章图片
将数组作为指针传递给函数
现在,我们将看到如何将数组作为指针传递给函数。
#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中返回一个数组】输出量
文章图片
注意:从以上示例中,我们观察到数组作为参考传递给函数,这意味着数组也保留在函数外部。如何从函数返回数组
返回指向数组的指针
#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()函数,并且堆栈中的所有变量均被释放。因此,可以说该程序正在返回已经取消分配的内存位置,因此该程序的输出是分段错误。
输出量
文章图片
有三种将数组返回到函数的正确方法:
- 使用动态分配的数组
- 使用静态数组
- 使用结构
文章图片
通过将要作为参数返回的数组传递给函数来返回数组。
#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;
}
输出量
文章图片
使用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;
}
输出量
文章图片
使用静态变量
#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’ 的实际存储位置。
输出量
文章图片
使用结构
#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;
}
输出量
文章图片