数组名是指针常量,保存的是首元素的地址,不能做自加。
数组最好是不要用变量动态定义的,即当你输入的字符个数不确定时,就想先定义一个变量,然后把它传给数组作他的长度。因为这是依赖于编译器支持的标准,如果是C99的话,则可以动态定义数组大小。而像C89等则不可以,所以在不确定编译器支持标准时最好是不要用变量动态定义数组大小。
所以,我们要做到定义时写死数组长度。定义一下数组大小。
下面举例都用定义的数组名为a的数组;
数组初始化方法有:1、int 数组名[] = {0};; 2、memset(数组名,0,sizeof(数组名));
用scanf给数组赋值的时候1、scanf(“%d”,&a[i]); 2、scanf(“%d”,a+i);(自己定义一个变量i,进行循环)
a[i] == *(a+i)
&a表示取数组的地址
*和&互为逆运算,*(&a)和a是一样的,对一维数组的地址取值等于一维数组首元素的地址
二维数组不能省略列
*(*(a+i)+j)的意思,分开解析:1、(a+1)是第i+1个一维数组的地址。2、*(a+1)第i+1个一维数组的首元素的地址。3、*(a+1)+j第i+1个一维数组的第j+1个元素的地址。4、*(*(a+1)+j)第i+1个一维数组的第j+1个元素的值。
a[][]两个[]分别代表第几个一维数组和一位数组中的第几个元素。
a[][][]的[]分别代表第几个第几行第几列的数组。
&a对一维数组名取值,即一维数组的地址。
*(&a)对一维数组的地址取值,等于一维数组首元素的地址。
a一维数组首元素的地址。
aa首个一维数组的地址。
*aa首个一维数组的地址。
**aa首个一维数组的首元素的地值。
&aa对二维数组名取地址等于二维数组的地址。
*(&aa)对二维数组地址取值等于首个一维数组的地址。
**(&aa)== *aa
数组指针像((*a)[])大部分用作函数传参。
一维数组作形参时,系统会将其类型强制转化成指针。
传一维数组名,用元素的指针来接。
传二维数组名,用一维数组指针来接。