c语言函数返回数组指针的函数
A. 用c语言如何使函数返回值为指向一维数组的指针
这个问题一个较为妥善的方法是把数组定义在主函数,再传入数组地址给自定义函数,如果你非要在自定义函数里定义也行,至于是否需要设置为static,那得看情况,因为函数退出时栈空间并不是马上被刷新,如果你能保证该栈空间在你访问前没被释放就没必要定义为static,但是保险起见定义static更好,因为你可能不知道到底该内存是不是被重新写入了数据,至于你说要返回指向指针的指针,我举个例子,int**
fun(),这个就是返回一个指向指针的指针,其指向的指针指向int型,呵呵,明白了没
B. c语言 函数返回数组指针
由于你在子函数int *shuzu(void)中定义的数组 a[4];属于局部变量,在子函数结束时会被释放,所以返回的指针变成野指针,会乱码;简单的解决方法有两种,1. 将数组定义在主函数之前(#include <stdio.h>下面),那么就变成了全局变量,不会被释放了;2.使用malloc或者calloc开空间后再赋给这个数组,这样也不会被释放了;第一种方法有缺点,以后学到全局变量的时候会知道,第二种方法估计你还没学到,不过很简单,网络一下就会了~~~
C. c语言函数返回数组
函数是无法返回数组的,只能返回指针,但返回指针的弊端是指针指向的内存不能是函数的局部变量的。所以还得用传出参数,有两个办法,一是直接用一个array就搞定,另它的每一行的最后一列是计算出来的平均值;另一个方法就是再传入进去一个指针,返回平均数。第一种可以不修改当前接口直接改,但如果无所谓还是第二种比较好,代码如下:
voidstudent_aver(floatarray[3][3],floataverage[3]){
inti,j;
floatsum;
for(i=0;i<3;i++){
sum=0;
for(j=0;j<3;j++)
sum=sum+array[i][j];
average[i]=sum/3;
}
}
D. C语言怎么让一个函数返回指针
这种方式叫做“用指针函数*creat()的返回值来传递动态内存”,这是一个C语法
首先你唤粗帆要注意,子函数*creat()用了malloc动态申请内存,凳高而return返回的是指针变量所指向的地址,而不是指针!相当于将你所申请的动态内存返回给主函数
int *fun(void)//这里是指针函数
{
int *p = (int *) malloc (int);/和雹/动态申请内存//p在这里指向了一块合法内存的地址
return p;
}
void main(void)
{
int *q = NULL;
q = fun();//fun()返回指针p所指向的地址,(指针p是在栈上创建的,所以*fun()函数运行完,指针所分配的内存被系统自动释放)这时q指向p,得到了malloc所申请到的内存
free(q);//释放动态内存
}
E. (C语言)返回指向数组的指针的函数
第二种方法是因为类型不匹配(double*与(double(*)[ROW])产生错误,而且
((double (*)[row])matrix);
里的[row]是一个变量,而指向数组的指针
double (*matrix)[ROW]里的ROW只能使用常量,所以这里也有一个错误。
由于指向数组的指针指向的数组长度(即第一维)必须是确定的常量,所以你这种行列皆不确定的数组不能用这种形式返回。
我觉得用第一种形式好一点,访问二维数组a[i][j]可以转换成访问一维数组a[i*row+j];//row是列数
如果非要返回二维数组的话,我想用指针数组会好一点,不过分配空间的时候就麻烦一点。
F. C语言 通过指针从函数返回一个数组,编一道简单的程序解释
通过指针从函数返回一个数组
换句话说,返回的并不是数组,而是数组的首地址!
#include<stdio.h>
int*fun()//返回类型int*,与returna中的a的类型相同才可以!
{
staticinta[]={1,2,3};//静态变量,函数结束后,不会被系统回收
returna;//返回数组名,即数组首地址
}
intmain()
{
int*p=fun();//定义整型指针p接收返回地址
inti;
for(i=0;i<3;i++)//遍历返回的地址中的数据!
printf("%d",p[i]);
printf(" ");
return0;
}
G. C语言怎么让“函数”返回“指针数组”
你好
从问题来看,似乎你对于指针的概念没太理解。指针变量中存储的是内存中的地址,而实际的数据放在这个地址中。
按照这段代码来说,int* 声明的指针指向内存中的一块地址,而在这块地址中存储着一个整形数值。所以要返回这样的值,也就相当于是返回一个内存地址。因此,在程序中有两种具体的解决办法:
1.在调用函数的时候,直接将变量的指针(即内存地址)作为参数传入,在函数执行的时候,就会自动对内存中相应地址的数据进行操作。使用这种方法也就不需要返回值了。具体到这段代码中,就是在Main中声明int* tempA[10],把foo函数声明为void foo(int* a[10]),调用时用foo(tempA),在foo函数中直接使用a[10]即可。
2.直接把内存地址作为返回值,因为在C中,数组名就是数组首元素的指针,因此直接返回数组名就可以了,即return a即可。如果是普通变量,要用取内存地址的运算符&,比如声明了整型变量 int i,就可以return &i。这与printf函数中的使用方法是相通的。
【按照补充的内容:】
a-------->a1-------->i1
|-------->a2-------->i2
|……………………
|-------->an-------->im
这样的调用方法,只能保证a1-an不被修改,怎么保证i1-im不被修改?
希望以上回答能帮到你。【PS.很久没用C了,如果哪里出了差错,请指正。】
H. C语言用返回指针值的函数输出数组
因为input()函数创建的数组num[5]作用域在input()函数之内,当input()函数调用结束后,这段内存会被回收,也就是里面的值会变成其他数。修改办法是在堆区创建数组变量手动释放内存!
修改后:
I. c语言中怎样返回一个数组
在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。
在大多数情况下,一维数组和一维指针是可以通用的。
比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。 代码可以写成如下形式:
int*int_array_create(intn)//参数n为数组元素个数
{
int*r;
if(n<=0)returnNULL;//参数错误
r=(int*)malloc(sizeof(int)*n);//申请内存空间,大小为n个int长度。
returnr;//返回得到的整型数组的指针。
}