⑴ 怎么在函数里return一个数组
数组在作为函数返回值或者函数参数时,实际上只作为指针来返回或者传递的。因此返回值用指针数据类型。比如下面的代码:
int g_a[4] = {1,2,3,4};
int * retn_arrary() //返回值用指针类型即要。
{
return g_a;
}
⑵ 如何定义一个函数 返回一个指向数组的指针
“指向数组的指针”是一个有点麻烦的东西,例如
int a[7];
指向数组的指针要这样定义:int (*p)[7];这个p是一个指针变量,专门用来指向“包含7个int元素”的数组,可以这样为p赋值:p=&a;。由此也可以看出,楼上说的是错的。正确的应该是这样:
typedef int(*TYPE)[9];
TYPE fun()
{
int a[9];
TYPE p=&a;
return p;
}
可见此法限制太多,使用太复杂。而且,最关键的问题是:这个数组是一个局部数组,它占的内存在fun函数执行完后就会被释放掉
一般要“返回数组”的函数都会使用动态内存分配来开辟一段连续的空间,然后把这个内存段的首地址返回(而不是返回“指向数组的指针”)。这样的操作比较简便,是通用的办法
⑶ 怎样定义才能让函数return一个数组
函数不可以定义为数组,可以用函数指针来操作。1.函数指针的数组定义方法:返回值类型(*指针变量名[Number])(形参列表)。例如:doubleadd(doublea,doubleb){};doublesub(doublea,doubleb){};doublemul(doublea,doubleb){};doublediv1(doublea,doubleb){};double(*oper_func[])(double,double)={add,sub,mul,div1};//函数指针的数组定义2.函数指针是指向函数的指针变量。因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。函数指针有两个用途:调用函数和做函数的参数。3.函数指针的声明方法为:返回值类型(*指针变量名)(形参列表);“返回值类型”说明函数的返回类型,“(*指针变量名)”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如:intfunc(intx);/*声明一个函数*/int(*f)(intx);/*声明一个函数指针*/f=func;/*将func函数的首地址赋给指针f*/或者使用下面的方法将函数地址赋给函数指针:f=&func;赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。例子:#includeint max(int x,int y){return (x>y? x:y);}int main(){ int (*ptr)(int, int); int a, b, c; ptr = max; scanf("%d%d", &a, &b); c = (*ptr)(a,b); printf("a=%d, b=%d, max=%d", a, b, c); return 0;}
⑷ 如何定义一个函数 返回一个指向数组的指针
假设指向数组的指针所指向的数组是:int a[M][N] //M、N都是符号常量
函数返回一个指向数组的指针,则可以这样定义:
int(*)[N]func(inta[][],其他形参)//函数返回值类型为int(*)[N]
{
int(*p)[N];
p=a;//数组指针指向a
......
returnp;
}
⑸ sql语句什么情况返回集合 什么情况返回数组
都一样的.你想返回什么类型就是什么类型.
一般的集合都是可序列化的.因此差异不大
⑹ ~~函数如何返回一个char数组
把函数的返回值的类型设置为char类型的指针就可以了。
实例:
#include <iostream>
using namespace std;
char* MultMatrix( )
{
char*M = new char[4];
M[0]='a';
M[1]='b';
M[1]='c';
M[3]='d';
cout << M[0] << " " << M[1] << endl;//输出返回前的数组
cout << M[2] << " " << M[3] << endl;
return M;
}
int main()
{
char *M = MultMatrix();
cout << M[0] << " " << M[1] << endl;//输出返回后数组
cout << M[2] << " " << M[3] << endl;
delete[] M;
return 0;
}
运行结果:
a b
c d
a b
c d
没有问题,new的空间也delete掉了。
⑺ 怎么将查询到的数据返回成数组或结构体的形式返回呢
看看这个对你有没有启发啊。
实现结构体变量交换值的函数
tags: 实现 结构 变量 交换 函数
#include <stdio.h>
#include <string.h>
struct stuff
{
char full_name[20];
unsigned age;
unsigned gender;
};
void swap_struct_data(char *ptr_a, char *ptr_b, int size)
{
/*函数:swap_struct_data
作用:交换两个结构型变量的值
参数:ptr_a 变量A的地址,ptr_b 变量B的地址,size 变量的大小*/
char p;
while (size--!=0)
{
p=*ptr_a;
*ptr_a=*ptr_b;
*ptr_b=p;
ptr_a++;
ptr_b++;
}
}
int main()
{
/* 定义两个stuff型的变量,并初始化 */
struct stuff stu_a;
struct stuff stu_b;
strcpy(stu_a.full_name,"hexuhui");
stu_a.age=60;
stu_a.gender=1;
strcpy(stu_b.full_name,"candy");
stu_b.age=20;
stu_b.gender=2;
/* 显示交换数据前的值*/
printf("Data in stu_a:\n");
printf("%s\n",stu_a.full_name);
printf("%d\n",stu_a.age);
printf("%d\n",stu_a.gender);
printf("Data in stu_b:\n");
printf("%s\n",stu_b.full_name);
printf("%d\n",stu_b.age);
printf("%d\n",stu_b.gender);
/* 调用swap_struct_data函数,取出stu_a和stu_b的地址,转换成字符型指针后传入函数,
sizeof(struct stuff)是结构体的大小 */
swap_struct_data((char *)&stu_a,(char *)&stu_b,sizeof(struct stuff));
/* 显示交换数据后的值*/
printf("Data in stu_a after call function:\n");
printf("%s\n",stu_a.full_name);
printf("%d\n",stu_a.age);
printf("%d\n",stu_a.gender);
printf("Data in stu_b after call function:\n");
printf("%s\n",stu_b.full_name);
printf("%d\n",stu_b.age);
printf("%d\n",stu_b.gender);
}
⑻ ci框架在查询数据库,如何返回一个一维数组,我查的是多条数据的一个字段
直接取一维数组是取不到了
只能把二维转成一维的了:
用result_array取到二维数组
再用array_column,转为一维数组
例:
$sql = 'select name from user';
$result = $this->db->query($sql)->result_array();
$one = array_column($result, 'name');
print_r($one);//这个就是一维数组了
⑼ C语言 怎么返回一个数组
你想返回一个数组,因为你在一个函数内创建了数组,属于局部变量,所以他在stack部分,而stack部分是用后类似于销毁的,你返回的地址类似于一块垃圾的地址,所以编译警告。你要想返回函数内创建的数组地址的话需要
//insideafunction
{
//nisthesizeofthearray;
int*array=(int*)malloc(sizeof(int)*n);
/*
dosomethingwitharray
*/
returnarray;
}
这样这个数组建立在heap堆上,调用完函数还在,而你返回了那个堆上数组的首地址,这样就没问题了。
用完free(array);
楼上用static不推荐,用static的话会在整个程序的run time运行时都占用空间。而是用malloc,动态申请释放更合理。