一维数组:类型名 数组名[元素个数],其中在书写时,元素个数可省略,系统会自行判断。
二维数组:本质上是以数组作为数组元素的数组,即“数组的数组”
类型说明符 数组名[常量表达式][常量表达式]
行优先原则 eg:a[ ][ ] 第一个中括号内容可省略,第二个不可以省略。
#include <stdio.h>
int main()
{
int brr[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int crr[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
printf("%d,%d\n",&crr[0][4],&crr[1][0]); //输出地址相同
printf("%d\n",crr[1][5]);//10// == crr[2][1]
}
输出结果:
第一行输出地址相同,说明二维数组可以转化为一维数组
在判断指针类型的时候,我们通过以下步骤:
1.先看优先级!有*是指针,看指针指向什么内容
2.[ ]是数组,要讨论数组的数据类型和长度
3.( )是函数,讨论参数列表和返回值
eg:
int (*p)[4] //()优先级大于[],因此*先和p结合,后指向数组 //数组指针
int *p[4] //[]优先级大于*,因此是保存指针的数组 //指针(的)数组
int (*p)() //都是()优先级相同,从左往右看,是指向函数的指针 //函数指针
int *p() //()优先级高,因此是指向指针的函数 //指针函数