从函数返回一个2d数组
发布时间:2020-12-16 05:56:02 所属栏目:百科 来源:网络整理
导读:我是一个新手C. 我试图从函数返回一个2d数组. 这是这样的 int *MakeGridOfCounts(int Grid[][6]){ int cGrid[6][6] = {{0,},{0,}}; int (*p)[6] = cGrid; return (int*)p;} 我知道这会导致错误,需要帮助.谢谢 解决方法 C语言有一个基本的缺陷:不可能从函数
我是一个新手C.
我试图从函数返回一个2d数组. 这是这样的 int *MakeGridOfCounts(int Grid[][6]) { int cGrid[6][6] = {{0,},{0,}}; int (*p)[6] = cGrid; return (int*)p; } 我知道这会导致错误,需要帮助.谢谢 解决方法
C语言有一个基本的缺陷:不可能从函数返回数组.
这有很多解决方法我会描述三个. 用指针替换为数组 返回一个指针而不是一个数组本身.这导致C中的另一个问题:当一个函数返回一个指向某个东西的指针时,它通常应该分配动态的东西.你不应该忘记以后再次分配(当不再需要数组时). typedef int (*pointer_to_array)[6][6]; pointer_to_array workaround1() { pointer_to_array result = malloc(sizeof(*result)); (*result)[0][0] = 0; (*result)[1][0] = 0; (*result)[2][0] = 0; (*result)[3][0] = 0; (*result)[4][0] = 0; (*result)[5][0] = 0; return result; } 用指针替换为int 一个2-D数组就像内存中的数字序列一样出现,所以你可以用一个指向第一个元素的指针替换它.你清楚地表示你想返回一个数组,但是你的示例代码返回一个指向int的指针,所以也许你可以相应地改变你的代码. int *workaround2() { int temp[6][6] = {{0}}; // initializes a temporary array to zeros int *result = malloc(sizeof(int) * 6 * 6); // allocates a one-dimensional array memcpy(result,temp,sizeof(int) * 6 * 6); // copies stuff return result; // cannot return an array but can return a pointer! } 用结构包裹 这听起来很愚蠢,但函数可以返回结构,即使它们不能返回数组!即使返回的结构包含一个数组. struct array_inside { int array[6][6]; }; struct array_inside workaround3() { struct array_inside result = {{{0}}}; return result; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby-on-rails – Rails 3.2.1中ActionMailer中未定义的方法
- logback logback.xml常用配置详解(一)<configuration> a
- ajax异步请求
- Flex获取参数(一)――window.location.search.substring
- ruby-on-rails – Rails 3路由到错误的控制器
- Cocos2d-x3.3RC0加载Android的WebView
- 文件读写中出现的问题
- .net core 控制台程序使用依赖注入(Autofac)
- OOD、DIP、IOC、DI、依赖注入容器(即 控制反转容器,IOC C
- 依赖注入 – 为需要异步初始化的类型避免所有DI反模式