C语⾔函数返回⼀维,⼆维数组
C语⾔函数返回⼀维,⼆维数组
最近在学习C语⾔时遇到这样⼀个问题,如何利⽤函数返回⼀个数组(要想⼀个函数执⾏后返回多个数据,或者是对数组操作之后返回数组)
C语⾔是不允许直接返回数组的,要想返回数组中的数据,必须使⽤指针。
由于函数执⾏后,会进⾏弹栈操作,在函数中定义的指针指向地址的空间会被释放,指针变成了野指针,所以不能返回指针指向 函数中定义的数组(局部变量数组),可以进⾏以下操作正确的返回指针:
⼀:定义静态数组
#include<stdio.h>
int *add(int a[5],int b[5]){
static int c[5]={0};
int *p = c;
for(int i=0;i<5;i++){
c[i]=a[i]+b[i];
}
return p;
}
int main(){
int a[5]={1,2,3,4,5};
int b[5]={1,2,3,4,5};
int *p = add(a,b);
for(int i=0;i<5;i++){
printf("%d ",p[i]); // printf("%d",*(p+i));
}
return 0;
}
⼆:定义全局变量
#include<stdio.h>
int c[5]={0};
int *add(int a[5],int b[5]){
int *p = c;
for(int i=0;i<5;i++){
c[i]=a[i]+b[i];
}
return p;
}
int main(){
怎么定义二维数组c语言
int a[5]={1,2,3,4,5};
int b[5]={1,2,3,4,5};
int *p = add(a,b);
for(int i=0;i<5;i++){
printf("%d ",p[i]); // printf("%d",*(p+i));
}
return 0;
}
三:使⽤动态内存管理
int *p = (int *)malloc(sizeof(int)*n);
for(int i=0;i<n;i++){
p[i]=a[i]+b[i];
}
return p;
}
int main(){
int a[5]={1,2,3,4,5};
int b[5]={1,2,3,4,5};
int *p=add(a,b,5);
for(int i=0;i<5;i++){
printf("%d ",p[i]);
}
return 0;
}
四:形参列表传⼊数组进⾏操作
***另外:要对数组的长度明确,不然操作会出问题可以通过以下⼏种⽅式传出数组长度
1.作为数组元素(例如作为第⼀个元素)
2.提前定义好长度;
3.约定结束条件;
下⾯是返回⼆维数组的操作
int **pp;
pp=(int **)malloc(sizeof(int *)*2);//malloc(sizeof(int *)*2)==malloc(2)
//这个mlloc函数只是给⼆维指针规划了地址,⼆维指针的性质没变
for(int i=0;i<2;i++){
pp[i]=(int *)malloc(sizeof(int)*3);
}
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
//pp[i][j]=a[i][j]+b[i][j];
*((int *)pp+3*i+j)=a[i][j]+b[i][j]; //思考⼀下为什么
}
}
return pp;
}
int main(){
int a[2][3]={1,2,3,4,5,6};
int b[2][3]={1,2,3,4,5,6};
int **pp = add(a,b);
for(int i=0;i<2;i++){
for(int j=0;j<3;j++){
printf("%d ",*((int *)pp+3*i+j));
}
}
return 0;
}
指针还是不敢乱⽤,使⽤之前得认真思考呀
CSDN发布的第⼀个贴⼦,留个纪念,哈哈哈,
2021、5、14  0:50

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。