首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用指针和Malloc的C网格

使用指针和Malloc的C网格
EN

Stack Overflow用户
提问于 2011-03-21 11:53:00
回答 4查看 1.3K关注 0票数 0

我正在努力学习一些课堂上的例子,并且一直停留在以下几个方面:

数组网格应该具有长度宽度,每个条目代表单元格的一列。有一些占用单元格的列应该是长度高度为malloc‘’ed的字符数组。

使用给定的标头:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void grid(char **grid, int width, int height)

在另一个文件中,网格定义为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char **grid;

正如我已经说过的,我一直在使用malloc,我现在有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int x;
*grid = malloc(width * sizeof(char));

        for(x = 0; x < width; x++){
            grid[x] = malloc(height * sizeof(char));
        }

谁能看看如何正确地完成“一些占用单元格的列应该是长度高度为malloc‘’ed的字符数组”的正确方法,因为我不明白这行是怎么回事:

gridx =malloc(高度*大小(Char));

等于一个字符数组。

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-03-21 11:58:48

在C中,数组是数组的第一个元素的指针。因此,数组只是一个内存块,数组变量指向这个内存块中的第一个元素。

malloc()保留指定大小的新内存块。要知道类型的大小(即存储该类型的一个变量所需的字节数),可以使用sizeof运算符。因此,一个字符需要sizeof(char)字节,因此高度字符需要height * sizeof(char)

因此,使用malloc()调用,您将分配一个内存块来存储数组的所有元素,malloc()将一个指针返回到第一个元素上。

使用C对数组变量的定义(指向第一个元素的指针),您可以将malloc(...)的结果分配给数组变量。

票数 4
EN

Stack Overflow用户

发布于 2011-03-21 11:58:35

char** grid;是指向指针的指针。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grid = malloc( width* sizeof( char* ) ) ;  // Statement 1

for( int i=0; i<height; ++i )
{
    grid[i] = malloc( height ) ; // Statement 2
}

理解char** -> char* -> char。因此,首先需要预留地址的宽度。在报表1中实现了这一目标。现在,这些索引中的每一个都应该指向存储高度字符的内存位置,并由语句2实现。

图表表示听起来比描述更清晰。希望这能帮上忙!

票数 6
EN

Stack Overflow用户

发布于 2011-03-21 11:57:49

用这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
grid = malloc(width * sizeof(char *));

您希望将width指针的空间分配给char,然后正确地将各个指针分配给循环中的height字符。

使用ty胡枝子使这一点更加可见:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
typedef char * charpointer;
charpointer * grid = malloc(width * sizeof(charpointer));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5382858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文