1、一维数组与指针
数组声明为int a[10];其中a被称为数组标识,可以看作是整个数组的指针,其指向的是数组的开头,如图所示。其中*numbers指向的是numbers[0],其中输入第一个数numbers[0]可以直接使用scanf("%d", numbers);不需使用&符号。
144237602.png
数组与指针的关系:
*numbers=numbers[0];   *(numbers+n)=number[n];    numbers+n = &(numbers[n]);

数组赋值如果小于长度,则数值型补0,字符型补'',字符串型补"\0",大于的话会报编译错误。


2、多维数组与指针
二维数组与指针的对应关系为a[n][m]=*(*(a+n)+m)
多维数组对应关系:
144246654.png
多维数组赋初值规律:
从最底层开始,除了最大的括号外,每遇一个‘{’则下一级,每遇一个‘,’右移一级,遇'}'则未赋值的略去。
例:int a[3][3][3]={{{1,2,3,4},1,2,3},{5,6,7,8}};

先为最大的括号,略去,然后遇到两个大括号,则从a[0][0]开始赋值赋值4个,即a[0][0][0]=1,a[0][0][1]=2,a[0][0][2]=3,a[0][1][0]=4,此时舍去a[0][1],从a[0][2]开始赋值,即a[0][2][0]=1,a[0][2][1]=2,a[0][2][2]=3。然后赋值a[1],赋值4个a[1][0][0]=5,a[1][0][1]=6,a[1][0][2]=7,a[1][1][0]=8,剩下的为0,这样赋值就完成了。


3、sizeof与数组和指针
sizeof是计算某个符号所占字节数的关键字,计算主要以malloc分配的空间为主,单纯的变量与其指针的大小是一样的,但数组却随着指针层数的不同而发生变化。
N维数组a[n1][n2]...[nn]的sizeof为n1*n2*...*nn*sizeof(a[0][0]...[0](n个))=n1*n2*...*nn-1*sizeof(a[0][0]...[0](n-1个))=...=n1*sizeof(a[0])=sizeof(a)
=n1*sizeof(*a)=n1*n2*sizeof(**a)=...=n1*n2*...*nn*(**..*a);