若有定义
typedef char T[10] ; T * a ;
上述定义中a的类型与下面选项中完全相同的是?
typedef char T[10] ;T * a ;这里T是什么类型呢,把名字抹去不就是类型了吗?char [10],T为一个char数组。那么T * a中啊为什么类型呢,T * ,T为数组,是一个整体,a为指向这个数组的一个指针喽。也就是a为指向一个是个元素的数组的指针。首先,a是指针,不是数组,然后a是数组指针,不仅仅是指针。所以A,C排除了。那么剩下两项B,D.char (*a) [10] ;char *a [10] ;这里就是一个优先级的问题了,[]优先级要高于解引用运算符。所以第一个a为指针,指向具有十个char元素的指针。第二个为数组,每个元素都是指针,每个指针指向一个char变量。这就是函数指针和函数也有类似的问题。分析优先级即可游刃而解。
a到底是指向一个10个数据的指针,还是一个指向10个指针的数组
我认为偏向前者
看分析:
T b;
相当于 char b[10];
相信大家对这个没啥意见吧
那么,
T *a;
也就是一个指针a指向了一片空间,空间连续,并且以T为基本单位
来看D答案 : char *a [ 10 ]
里面的10指的是10个T类型的指针,
而typedef char T[10] 里面的10指的是10个char数值
两个10之间没啥关系就
T *a也没有告诉我们就必须申请10个指向T类型的指针
T *a只是告诉我们声明了一个a指针,指向一片地方,这片地方都是T类型的数据而已
这就像是int *a = new int[],
我们有一个指针a,以int类型为单位移动 int默认4字节移动(32位cpu)
只不过这里T是默认10个字节移动
B答案: char ( *a) [ 10 ] ; (大写A改成小写)
声明了一个指针,指针每次移动都是以T为单位的 ,符合!
***********************
// edition 1
typedef char T[10];
int main() {
T *a;
char (*b)[10];
a = b;
}
************************
// edition 2
typedef char T[10];
int main() {
T *a;
char *b[10];
a = b;
}
***********************
大家来验证一下上面哪个可以编译成功