2011-03-21 54 views
0

我试图通过一些类的实例的工作,并已得到粘贴在以下:Ç网格使用指针和malloc的

阵列网格应 具有与表示 单元的列中的每个条目的长度的宽度。有一些被占用的单元格的列应该是长度为height的 malloc'ed字符数组。

与给定的标头:

void grid(char **grid, int width, int height) 

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

char **grid; 

正如我所说我已经得到了卡在使用malloc,我现在有:

int x; 
*grid = malloc(width * sizeof(char)); 

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

任何人都可以看看给我一些指示正确的方法来完成“列有s OME占用细胞应是长度高度的 malloc分配字符数组“,正如我不理解如何行:

网格[X] = malloc的(高度* 的sizeof(char)的);

相当于焦炭的

感谢

回答

4

在C中,数组是数组的第一个元素的pointer。所以一个数组只是一个内存块,数组变量指向这个内存块中的第一个元素。

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

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

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

1

使用此数组:

grid = malloc(width * sizeof(char *)); 

您想为width指针分配空间为char - 然后你正确地分配个人指针height字符在循环中。

使用的typedef使得这一点更加明显:

typedef char * charpointer; 
charpointer * grid = malloc(width * sizeof(charpointer)); 
4

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

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来实现。


图示表示听起来比描述更清晰。希望有所帮助! Diagram

+0

+1为图 – 2011-03-21 21:00:52

-1
  1. 首先为[width]字符指针数组分配空间。因此,代替为[width]字符分配空间的*grid = malloc(width * sizeof(char));,应该使用*grid = malloc(width * sizeof(* char));(不同之处在于char是一个字节,而char指针是int(通常是32位,但取决于体系结构)
  2. 在循环中,每次你分配(一个数组)[hight]字符并将指针存储在你在(1)中分配的指针之一中,所以grid [x]实际上指向一个分配的字符缓冲区(这是你的数组)

希望我明确

+0

@Downvoter经过六月份 - 。护理解释? – MByD 2011-09-25 00:51:49