c语言函数将如何返数组,声明一个C函数返回一个数组
有几点要指出。
首先,您不能像在这里那样分配数组对象:
char A[WIDTH][HEIGHT];
A=rand_grid(WIDTH,HEIGHT);
数组类型的对象不可修改。
其次,C语言中的函数无法返回数组类型。 但是,它们可以返回指向数组的指针:
char (*foo(int width))[HEIGHT]
{
/**
* dynamically allocate memory for a widthxHEIGHT array of char
*/
char (*newArr)[HEIGHT] = malloc(sizeof *newArr * width);
/**
* initialize array contents here
*/
return newArr;
}
语法有点混乱; 它读为
foo -- foo
foo(int width) -- is a function
-- taking an int parameter
*foo(int width) -- returning a pointer
(*foo(int width))[HEIGHT] -- to a HEIGHT-element array
char (*foo(int width))[HEIGHT] -- of char
对于C89,以上代码段中的HEIGHT必须是编译时常量整数表达式(宏,数字文字或由宏和/或数字文字组成的算术表达式)。 我不确定C99是否也适用。
根据您发布的代码片段,您要做的是获取一个已经分配的数组并初始化其内容。 请记住,在大多数情况下,数组类型的表达式将隐式转换为指向基本类型的指针。 IOW,如果将T的N个元素数组传递给函数,则函数实际接收的是指向T的指针:
void foo (T *p) {...}
...
T arr[N];
foo(arr);
对于二维数组,这有点难看:
void foo (T (*p)[M]) {...}
...
T arr[N][M];
foo(arr);
这也依赖于在编译时已知M,这限制了函数的用途。 您想要的是一个可以处理任意大小的二维数组的函数。 我所知道的最好的方法是,不要将指针传递给数组,而是传递array [1]中第一个元素的地址,并将行数和列数作为单独的参数传递:
void foo(T *base, size_t rows, size_t cols) {...}
...
T arr[N][M];
foo (&arr[0][0], N, M);
因此,您的rand_grid函数将如下所示:
void rand_grid(char *base, size_t rows, size_t cols)
{
size_t i, j;
for (i = 0; i < rows; i++)
{
for (j = 0; j < cols; j++)
{
/**
* Since base is a simple char *, we must index it
* as though it points to a 1-d array. This works if
* base points to the first element of a 2-d array,
* since multi-dimensional arrays are contiguous.
*/
base[i*cols+j] = initial_value();
}
}
}
int main(void)
{
char A[WIDTH][HEIGHT];
rand_grid(&A[0][0], WIDTH, HEIGHT);
...
}
即使表达式&A[0][0]和A产生相同的值(A的基地址),两个表达式的类型也不同。 第一个表达式的结果为指向char的简单指针(char *),第二个表达式的结果为指向char的二维数组的指针(char (*)[HEIGHT])。
c语言函数将如何返数组,声明一个C函数返回一个数组相关推荐
- php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组
php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组 $result = array(); //$content是一个多维数组 $walk = array_wal ...
- java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。
题目: 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数组为: d[0][0]=1 d[0][1]=2 ...
- java定义一个方法,返回一个整数数组的元素平均值
java定义一个方法,返回一个整数数组的元素平均值 /*** 定义一个方法* 返回一个整数数组的元素平均值*/ public class Test25 {public static double av ...
- java定义一个方法,返回一个整数数组的元素最小值
java定义一个方法,返回一个整数数组的元素最小值 /*** 定义一个方法* 返回一个整数数组的元素最小值*/ public class Test24 {public static int minAr ...
- java定义一个方法,返回整数数组的元素最大值
java定义一个方法,返回整数数组的元素最大值 /*** 定义一个方法* 返回整数数组的元素最大值*/ public class Test23 {public static int maxArray( ...
- java定义一个方法,返回一个整数数组的和
java定义一个方法,返回一个整数数组的和 /*** 定义一个方法* 返回一个整数数组的和*/ public class Test22 {//定义数组public static int getArra ...
- js移除数组中的元素(返回新数组)
移除数组中的元素(返回新数组) 移除数组 arr 中的所有值与 item 相等的元素.不要直接修改数组 arr,结果返回新的数组. 输入:[1,2,3,4,2] ,2 输出:[1,3,4] 第一种解决 ...
- php接口返回一个数组怎末写_返回php数组
PHP数组简介 v 一.PHP数组的分类 按照下标的不同,PHP中的数组分为关联数组和索引数组: 索引数组:下标从0开始,依次增长. $arr=[1,2,3,4,5]; 关联数组:下标为字符串格式,每 ...
- 如何解析一个字符串并返回一个嵌套数组?
我想要一个Python函数,它接受一个字符串,并返回一个数组,其中数组中的每个项目都是一个字符,或者是另一个这样的数组.嵌套数组在输入字符串中以'('和以')'开头标记. 因此,该函数将如下所示: 1 ...
- unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度
var arr = [1, 2];arr.unshift(0); //result of call is 3, the new array length //arr is [0, 1, 2]arr.u ...
最新文章
- Cisco PT模拟实验(19) 路由器的NAT功能配置
- STM32 基础系列教程 27 - USB_HID
- 录制失败因为媒体服务失败_具惠善减肥失败,竟然是因为它
- SpringSecurity相关jar包的介绍
- 图像处理常用边缘检测算子
- cocos2d-x学习笔记之图片分辨率适配
- HDU 5842——	 Lweb and String CCPC 网络赛 1011
- 英特尔+性能+linux,Linux 4.20内核在英特尔处理器上性能比Linux 4.19低,附原因解释...
- 索引sql server_SQL Server报告– SQL Server索引利用率
- @Valid 和 @Validated的使用
- VB6源代码收藏页面
- Win10常用快捷键
- GDELT数据库入门与了解(码字中...)
- C语言pow()函数的运用(x的y次幂)
- 电脑连接了HDMI线,电脑没有声音了,原因和解决办法
- 记一次投票活动的感触
- 赋能 打造应对不确定性的敏捷团队 pdf_赋能,打造应对不确定性的敏捷团队读后感(一)...
- ORB、SURF、SIFT特征点提取方法和ICP匹配方法
- jquery系列之-ajaxSubmit()提交表单示例
- 资产负债表与利润表钩稽关系