1 a和&a的区别
int a[10] = {1,2};//其他初始化为0
a代表数组首元素的地址,不是整个数组的地址
&a表示整个数组的地址 &a,a代表的数据类型不一样
&a数组类型int[10]
a 数组首元素的类型
2 数组指针的用法
int i=0;//循环变量
int a [5] = {3, 4, 5, 6, 2};
//直接定义一个数组指针
int (*p)[5] = &a;
for (i=0; i<5; i++)
{
printf("%d\n", (*p)[i]);
}
3 二维数组的本质
结论:二维数组名charmyArray[3][5]是一个数组指针,char (*)[5]
#include "stdio.h"
#include "stdlib.h"
int main()
{
int i,j;//循环变量
int k=0;
char myArray[3][5];//myArray是一个数组指针
for (i=0;i<3; i++)
{
for (j=0; j<5; j++)
{
myArray[i][j]=k++;
}
}
for (i=0;i<5; i++)
{
printf("%d ", (*myArray)[i]);//输出 0,1,2,3,4
}
system("pause");
return 0;
}
4 二维数组的三种内存模型
int printf2Array_1(char myArray[3][10], intiNum)
{
int i = 0;
for (i=0; i<iNum; i++)
{
printf("%s \n",myArray[i]);
}
return 0;
}
intprintf2Array_2(char myArray[][10], int iNum)
{
int i = 0;
for (i=0; i<iNum; i++)
{
printf("%s \n",myArray[i]);
}
return 0;
}
intprintf2Array_3(char (*myArray)[10],int iNum)
{
int i = 0;
for (i=0; i<iNum; i++)
{
printf("%s \n",myArray[i]);
}
return 0;
}
5 多维数组
1 )不管是几维数组,都是线性存储的。所以会存在多维数组做函数参数,退化问题。
2 )多维数组做函数参数二维数组,能勉强表达出来。但是三维数组,四维数组,,就表达不出来了。
结论:指针做函数参数,有效内存维数,只到2级。如果你看到3级指针 4级指针,它表示的不是内存的维数。
数组参数 等效的指针参数
一维数组 chara[30] 指针 char*
指针数组 char*a[30] 指针的指针 char **a
二维数组 chara[10][30] 数组的指针 char(*a)[30]