C vs vs c 中的指针

Pointers in C vs C++

本文关键字:vs 指针      更新时间:2023-10-16

可能的重复:
为什么C 需要Malloc()的铸件,但C不需要?

此特定的代码在C中运行良好,但在编译为C 程序时会产生编译错误。

#include<stdio.h>
#include<stdlib.h>
int main(){
    int (*b)[10];
    b = calloc(20, sizeof(int));
    return 0;
}

C 汇编中的错误是:

test.cpp: In function ‘int main()’:
test.cpp:9:28: error: invalid conversion from ‘void*’ to ‘int (*)[10]’ [-fpermissive]

任何想法可能是什么原因?

时,在C中,您可以隐式地施放/到void指针到其他指针类型,在C 中不允许使用,并且您需要明确地施放它:

b = (int (*)[10])calloc(20, sizeof(int));

C++C更严格地检查语言。因此,您需要手动输入它,但在C中是自动分类的。

在这里calloc返回 void*b是类型int(*)[],因此是必需的。

在C 中,还可以牢记其他类型的种姓

<static_cast>
<const_cast>
<reinterpret_cast>
<dynamic_cast>

有关更多信息何时使用static_cast,dynamic_cast,const_cast和reinterpret_cast?

c在铸造时更允许,C 要求您在铸造时明确。您也应该在C版本中施放它。