C `typeof(array)`vs`typeof(*array)有什么区别*`

C `typeof(array)`vs`typeof(*array)有什么区别*`,c,gcc,typeof,C,Gcc,Typeof,更具体地说,我很难理解这在编译中失败的原因: int array[] = {4, 3, 2, 1}; typeof(array) __array_copy = (array); 错误为: main.c: In function 'test_map': main.c:113: error: invalid initializer 然而,这是可行的: int array[] = {4, 3, 2, 1}; typeof(*array) *__array_copy = (array);

更具体地说,我很难理解这在编译中失败的原因:

 int array[] = {4, 3, 2, 1};
 typeof(array) __array_copy = (array);
错误为:

main.c: In function 'test_map':
main.c:113: error: invalid initializer
然而,这是可行的:

 int array[] = {4, 3, 2, 1};
 typeof(*array) *__array_copy = (array);

typeofarray和typeof*array*之间到底有什么区别?

前者是数组,后者是指针。由于某种原因,不能用另一个数组初始化一个数组,C标准委员会认为这是个好主意,我认为不是。但是,您可以使用指针初始化指针,该指针由数组衰减为指向其第一个元素的指针构成。在您提问之前:不,数组不仅仅是指针。而且_数组_copy不是原始数组的副本。它甚至不是正确的代码-以双下划线开头的标识符是为实现保留的,因此此代码具有未定义的行为。可能与@user3477950重复,感谢您的回答,我认为这充分解释了它。介意把它作为一个答案而不是一个评论重新发布吗?因为这实际上是一个副本,我不想单独发布一个答案。@SteveCox它是C的GNU扩展。