别名和类型的结合是怎样的?


#include
#include
#include
#include
#include
#pragma warning(disable:4996)
typedef int  T[20];
int main(void) 
{
    T b;
    T(*c) = &b;
    T* a = &b;
    return 0;
}
int(*a1)[20];
int* a2[20];

a的类型是和a1还是a2的类型相同?
c的类型应该是和a1的类型相同吧?

a和c都跟a1是相同类型。
typedef int T[20]; 把int [20]这个类型给包裹起来了,跟#define的普通文本替换是不同的。所以不管*a是否加括号,a都是一个指针,指向一个int [20]的数组。

这个只要放到IDE里调试,监控一下变量就知道了。

img


可以看到c的值是一个地址,*c是一个数组。a也是一样。

另外我还截了a1和a2在监控变量中的样子,你对比一下就知道了

img

不太清楚,不过可以打印一下吧