关于C中malloc和calloc函数的困惑

时间:2017-07-03 10:29:43

标签: c function malloc void calloc

malloc功能宣言:

void *malloc(size_t size);

此处,malloc返回无效指针。因此,void函数不返回任何内容,然后

为什么我们将malloc(函数调用)值赋给指针?

例如:

int *ptr;
ptr = malloc(10 * sizeof (*ptr));
^^^

malloc() ???

的返回值是什么

3 个答案:

答案 0 :(得分:6)

这可能是语言设计者的一个不幸选择,但是他们决定重用void用于他们的void*构造,这几乎颠倒了它的含义:而void意味着&# 34;没有返回",void*表示"返回指向任何东西的指针。"

基本上,void*是指向未指定对象的指针。在取消引用之前,必须将其转换为指向特定类型的指针。这正是malloccalloc返回的那种指针。

答案 1 :(得分:2)

无效和无效*是不同的。 虚空意味着nohting但无效*可以是任何东西。 void(void *)的指针可以被输入到任何其他指针中。

为什么malloc()返回void *?

这意味着malloc为您分配了一个内存缓冲区,您可以使用它来存储您想要的任何东西。

答案 2 :(得分:1)

尽量不要被白色空间弄糊涂。在C中,您应该以这种方式阅读声明:

if (fileType.equalsIgnoreCase("Excel")) { Workbook wb = new XSSFWorkbook(f); for (int i = 0; i < wb.getNumberOfSheets(); i++) { System.out.println("Sheet name: " + wb.getSheetName(i)); Sheet sh=wb.getSheetAt(i); if (wb.getSheetName(i).matches("A|B|C|D")) { int rowCount = sh.getLastRowNum() - sh.getFirstRowNum(); for (int j = 0; j < rowCount + 1; j++) { Row row = sh.getRow(j); for (int k = 0; k < row.getLastCellNum(); k++) { System.out.print(row.getCell(k).getStringCellValue() + "|| "); } } } } 将被视为 - 变量int *i;,它为int 提供变量*i,它是指向int的指针。功能也一样。像i这样的东西意味着void *fun()是一个返回指向fun的指针的函数。请查看this以获得更完整的答案。