我在实验室里得到了这段示例代码,我正在努力理解它
int size = 5;
int **ppi2 = (int **) malloc(size * sizeof(int *));这是我到目前为止的分类:
为了分配足够的内存,我们必须将想要分配内存的东西的数量( size )乘以这些东西的大小(sizeof(int *))。这很简单,也很有意义。
我知道我们必须将malloc的结果转换为双指针,因为malloc返回字节,而变量是双指针,但是为什么我们首先要将ppi2设置为等于malloc的结果呢?它会使ppi2指向我们刚刚分配的内存中的点吗?
发布于 2014-02-15 04:23:56
使用malloc时,您可以将想要分配的内存字节数作为参数传递,它会将地址返回到您刚刚分配的内存的开头。将该地址存储在指针中后,您就可以对它执行您必须执行的操作。它不返回内存的字节数,而是返回地址,这样你就可以去操作它们了。这就是为什么掌握C内存管理是很重要的(不知何故,你丢失了地址,你就“丢失”了内存)。
如果您想更好地理解malloc是如何使用内存的,以及它与您的程序的关系(因为它是基础知识,我建议您这样做),请阅读Chapter 13 of Three Easy Pieces operative一书。它很短,很棒。
发布于 2014-02-15 02:55:00
我知道我们必须将malloc的结果转换为双指针,因为malloc返回字节,而变量是双指针...
Do not cast the return value of malloc。
为什么我们首先要将ppi2设置为等于
的结果?
指向与malloc返回的指针相同的位置。
是否使ppi2指向我们刚刚分配的内存中的点?
是。
发布于 2014-02-15 02:55:46
我知道我们必须将malloc的结果转换成双指针,因为malloc返回字节,而变量是双指针,
malloc不返回字节;它返回一个指向它分配的字节的指针。此指针具有泛型指针类型void *。在C++中,您必须将此void *转换回变量的指针类型,但在纯C中,此转换是可选的。
但是为什么我们首先要将ppi2设置为等于
的结果呢?它会使ppi2指向我们刚刚分配的内存中的点吗?
是。
https://stackoverflow.com/questions/21787300
复制相似问题