C 为什么我没有得到任何错误?在这些行之间--typedef int floa[1];floa a[5]={5,6,1,2,6,8};

C 为什么我没有得到任何错误?在这些行之间--typedef int floa[1];floa a[5]={5,6,1,2,6,8};,c,C,请解释代码/背后的逻辑 我喜欢代码块。我得到了答案20。为什么?请解释一下 #include <stdio.h> #include <conio.h> int main() { typedef int floa[1]; floa a[5]={5,6,1,2,6,8}; printf("the value is %u",sizeof(a)); return 0; } 我应该得到一个错误,但我不知道为什么?关键在于:typedef int

请解释代码/背后的逻辑

我喜欢代码块。我得到了答案20。为什么?请解释一下

#include <stdio.h>
#include <conio.h>
int main()
{
    typedef int floa[1];
    floa a[5]={5,6,1,2,6,8};

    printf("the value is %u",sizeof(a));
    return 0;
}

我应该得到一个错误,但我不知道为什么?

关键在于:typedef int floa[1] 运行以上代码,您将了解您的代码。上面的代码给出了size=48,所以基本上您的typedef创建的是mxn矩阵效果


但是正如Lee Daniel Crocker所提到的,将数组隐藏在typedef中不是一个好主意。

我应该会得到一个错误,但我不知道为什么?为什么?MSVC给出了错误C2078:太多的初始值设定项。将数组和指针类型隐藏在typedef中不是一个好主意,原因就在于:这会使代码难以阅读和推理。一个不是真正数组的数组上的typedef非常奇怪。这是一个奇怪的代码。它真的定义了一个5个1 int数组的数组吗?这合法吗?如果结构是有效的,那么它的大小应该是20!
#include <stdio.h>                                                                                      
int main()                                                                                              
{                                                                                                           
    typedef int floa[3];                                                                                
    floa a[4]={5,6,1,2};                                                                                

    printf("the value is %u value:%d %d %d %d %d %d %d %d",sizeof(a), a[0][0], a[0][1], a[0][2], a[0][3], a[1][0], a[1][1], a[1][2], a[1][3]);
    return 0;                                                                                           
}