C语言深度剖析很是经典,其中的讲解很是精妙,会触及一些易犯错的地方。对typedef讲解后更是留下一系列纠结的习题,弄了很长间总算有点收获。
分析如下:
///typedef int a[10]typedef int* a[10]/typedef int (*a)[10]//typedef int* (*a)[10]//
a b[10]; int b[10][10]; int * b[10][10]; int ((*b)[10])[10]; int *((*b)[10])[10];
int (*b[10])[10] !=int (*(*b)[10])[10];
a b; int b[10]; int *b[10]; int (*b)[10]; int *(*b)[10];
a* b[10]; int ((*b)[10])[10]; int *(*b[10])[10]; int (*(*b)[10])[10] int *(*(*b)[10])[10];
int (*b)[10][10] int *((*b)[10])[10] != int *((*b)[10])[10]; int *(**b[10])[10];
a* b; int (*b)[10]; int *(*b)[10]; int (**b)[10]; int *(**b)[10];
!= int *(*b[10]); (int (*d)[10]; b = &d;)
!= int *(*b)[10];
分析:
1. typedef定义时即 例如(typedef int a[10]) ,中间的int代表数组中存的内容。
2.定义时在后面一段即(typedef int a[10])中的a[10],在此处定义为数组与对(typedef int d) 做d[10]使用一致。
3.可把后面一部分整体当作一个类型来进行处理。
4.使用时如int* (**b)[10],这个应当这样理解:有一个大小为10的数组里面存的是int型指针,有一个数组指针指向这个数组,而另有一个指针指向这个数组指针,b就是这个指 针。
int ×d[10]; int *(*e)[10];
e = &d; b = &e;
5.typedef int* a[10]与typedef int *a[10]是一致的.