(一)引入一个二维数组:
eg1: int arr[3][4]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}//“ 默认行优先”这是一个三行四列的数组
eg2:int brr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
eg3:int crr[3][4]={1,2,3,4,5} //初始化时把数组里面的数一部分赋值,没有赋值的默认为0
eg4:int err[][4]={1,2,3,4,5,6,7,8,9,10} //空的系统就会默认行为3
引入一个二维数组-->(*p)[4]-->指向一个二维数组的指针-->数组指针
(二) 判断“指针数组”“数组指针”“函数数组”“数组函数”。。。
eg2: int *p[4]-->因为“[]”的优先级高于“*”,所以先确定为数组,剩下的一部分是一个指针, 所以最终确定为“一个保存整型指针的数组”即“指针数组”
eg3: int (*p)()-->因为都是“()”,所以按照自然顺序来,确定为指针,剩下的一部分是函数,所以最终确定为“一个指向参数为空返回值为整型类数据的函数的指针”即“函数指针”
eg4: int *p()-->因为“()”的优先级高于“*”,所以首先确定p为函数,剩下一部分是指针,所以最终 确定为“一个参数为空返回值为整形指针的函数”即“指针函数”
eg1: int arr[3][4]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}}//“ 默认行优先”这是一个三行四列的数组
eg2:int brr[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}
eg3:int crr[3][4]={1,2,3,4,5} //初始化时把数组里面的数一部分赋值,没有赋值的默认为0
eg4:int err[][4]={1,2,3,4,5,6,7,8,9,10} //空的系统就会默认行为3
引入一个二维数组-->(*p)[4]-->指向一个二维数组的指针-->数组指针
(二) 判断“指针数组”“数组指针”“函数数组”“数组函数”。。。
规则:
(1) 用运算优先级确定属性,这即到底是数组还是指针还是其他
(2) 如果是指针就考虑这个指针指向了谁,如果是数组就考虑这个数组的长度和类型如果是函数就考虑这个函数的参数列表和返回值
eg1: int (*p)[4]-->因为“()”的优先级高于“[]”,所以首先确定这是一个指针,后面是一个数组, 所以最终确定为“一个指向了数组的整型指针”即“数组指针”eg2: int *p[4]-->因为“[]”的优先级高于“*”,所以先确定为数组,剩下的一部分是一个指针, 所以最终确定为“一个保存整型指针的数组”即“指针数组”
eg3: int (*p)()-->因为都是“()”,所以按照自然顺序来,确定为指针,剩下的一部分是函数,所以最终确定为“一个指向参数为空返回值为整型类数据的函数的指针”即“函数指针”
eg4: int *p()-->因为“()”的优先级高于“*”,所以首先确定p为函数,剩下一部分是指针,所以最终 确定为“一个参数为空返回值为整形指针的函数”即“指针函数”