有几点要指出。

首先,您不能像在这里那样分配数组对象:

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函数返回一个数组相关推荐

  1. php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组

    php-使用函数array_walk_recursive处理多维数组的键值后返回一个新数组 $result = array(); //$content是一个多维数组 $walk = array_wal ...

  2. java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。

    题目: 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数组为: d[0][0]=1 d[0][1]=2 ...

  3. java定义一个方法,返回一个整数数组的元素平均值

    java定义一个方法,返回一个整数数组的元素平均值 /*** 定义一个方法* 返回一个整数数组的元素平均值*/ public class Test25 {public static double av ...

  4. java定义一个方法,返回一个整数数组的元素最小值

    java定义一个方法,返回一个整数数组的元素最小值 /*** 定义一个方法* 返回一个整数数组的元素最小值*/ public class Test24 {public static int minAr ...

  5. java定义一个方法,返回整数数组的元素最大值

    java定义一个方法,返回整数数组的元素最大值 /*** 定义一个方法* 返回整数数组的元素最大值*/ public class Test23 {public static int maxArray( ...

  6. java定义一个方法,返回一个整数数组的和

    java定义一个方法,返回一个整数数组的和 /*** 定义一个方法* 返回一个整数数组的和*/ public class Test22 {//定义数组public static int getArra ...

  7. js移除数组中的元素(返回新数组)

    移除数组中的元素(返回新数组) 移除数组 arr 中的所有值与 item 相等的元素.不要直接修改数组 arr,结果返回新的数组. 输入:[1,2,3,4,2] ,2 输出:[1,3,4] 第一种解决 ...

  8. php接口返回一个数组怎末写_返回php数组

    PHP数组简介 v 一.PHP数组的分类 按照下标的不同,PHP中的数组分为关联数组和索引数组: 索引数组:下标从0开始,依次增长. $arr=[1,2,3,4,5]; 关联数组:下标为字符串格式,每 ...

  9. 如何解析一个字符串并返回一个嵌套数组?

    我想要一个Python函数,它接受一个字符串,并返回一个数组,其中数组中的每个项目都是一个字符,或者是另一个这样的数组.嵌套数组在输入字符串中以'('和以')'开头标记. 因此,该函数将如下所示: 1 ...

  10. unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度

    var arr = [1, 2];arr.unshift(0); //result of call is 3, the new array length //arr is [0, 1, 2]arr.u ...

最新文章

  1. Cisco PT模拟实验(19) 路由器的NAT功能配置
  2. STM32 基础系列教程 27 - USB_HID
  3. 录制失败因为媒体服务失败_具惠善减肥失败,竟然是因为它
  4. SpringSecurity相关jar包的介绍
  5. 图像处理常用边缘检测算子
  6. cocos2d-x学习笔记之图片分辨率适配
  7. HDU 5842—— Lweb and String CCPC 网络赛 1011
  8. 英特尔+性能+linux,Linux 4.20内核在英特尔处理器上性能比Linux 4.19低,附原因解释...
  9. 索引sql server_SQL Server报告– SQL Server索引利用率
  10. @Valid 和 @Validated的使用
  11. VB6源代码收藏页面
  12. Win10常用快捷键
  13. GDELT数据库入门与了解(码字中...)
  14. C语言pow()函数的运用(x的y次幂)
  15. 电脑连接了HDMI线,电脑没有声音了,原因和解决办法
  16. 记一次投票活动的感触
  17. 赋能 打造应对不确定性的敏捷团队 pdf_赋能,打造应对不确定性的敏捷团队读后感(一)...
  18. ORB、SURF、SIFT特征点提取方法和ICP匹配方法
  19. jquery系列之-ajaxSubmit()提交表单示例
  20. 资产负债表与利润表钩稽关系

热门文章

  1. python程序员面试算法宝典 pdf_Python面试宝典之基础篇3
  2. 普林斯顿算法课作业的python实现(三)Collinear Points
  3. ESP32(MicroPython) LVGL图形界面控制开关与PMW输出
  4. 2020面试准备(一)
  5. 金庸笔下还有成功的婚姻吗
  6. 达梦管理员手册及客户端学习
  7. 61_有关多线程中join方法详解
  8. 决定把这个博客弄得不那么严肃正式
  9. 医院计算机怎么评职称,医院设备科主要是干什么的?医院设备科怎么评职称?...
  10. elementUI中分页器的使用