c语言指针 定义 int *a[3] 和 int *(a)[3] 有什么区别??? 书上的没看懂啊

如题所述

int *a[3] 和 int *(a)[3]没有区别,这个括号是多余的。
如果你问的是int *a[3] 和 int (*a)[3]的区别,则:
(1)int *a[3] 中 a是数组,数组中每个元素是个int类型的指针;
(2)int (*a)[3]中 a是指针,这个指针指向一个长度是3的int类型数组。
其实,这类问题关键就是如何理解(),这里()就是优先操作,先操作(*a),是个指针,后面就是int [3],是个数组。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-22
int *a[3]叫指针数组,int *(a)[3]叫指向数组的指针,名字都不一样,用法也不一样。
int *a[3]一般用来存放一系列的字符串。
如 int *a[3]={"hunan","guandong“,"beijing"};
int *(a)[3]则基本等同于int a[][3],用于在函数中做形式参数,接受传来的数据。如
调用fan(a[4][3]);
函数int fan(int *(a)[3]){
函数中的代码
}
第2个回答  2012-02-22
int *a[3];
//因为:数组名等效于指针,
//因此:int *(* (a+3)) 该类型为指针,即:该数组的元素为指针变量

int *(a)[3];
//因为:数组名等效于指针,[]比()、*操作符都要高级。
//因此:int * ( *(a+3 ) == int **(a+3) 该类型也为指针,即:该数组的元素为指针变量
第3个回答  2012-02-22
因为 [ ]的优先级 会比 *号高;所以 int *a[3]; a先与[3]结合 代表一个数组;其次再与int * 结合;

其他的同wxhysoft