二维数组
typedef int(INT10)[10];
main()
{
int array[10] = { 0,1,2,3,4,5,6,7,8,9 };
int other[2][5] = { 0,1,2,3,4,5,6,7,8,9 };
int(*parray)[10] = &array;
printf("%p\r\n", array + 1);//首 元素 地址 effa48 + 1*type(4) = effa4b
printf("%p\r\n", other + 1);//首 数组类型 地址 effa18 + 1*type(4)*5 = effa48
int* parray[10] = &array;//数组指针
}
·二维数组在内存呈线性排列
·二维数组第一维度存储的是数组指针
typedef int(INT10)[10];
void Foo(int *array)
{
}
数组指针
main()
{
int array[10] = { 0,1,2,3,4,5,6,7,8,9 };
int other[2][10] = { 0,1,2,3,4,5,6,7,8,9 };
Foo(array);//array 常量 指针(int* const)
Foo(&array);//&array 常量 数组指针(int(*)[10])
Foo(other);//other 常量 数组指针 (int(*)[10]) other指向一个长度为10的数组的指针
Foo(&other);//&other 常量 数组指针 (int(*)[2][10])
int(*parray)[10] = &array;//定义了一个数组指针指向数组array
}
***************************************************************************************
void Foo(int *array)
{
}
main()
{
int array[10] = { 0,1,2,3,4,5,6,7,8,9 };
int other[2][10] = { 0,1,2,3,4,5,6,7,8,9 };
Foo(&array);
}
函数Foo的参数类型为int*和传入的参数&array的类型int(*)[10]不匹配,会报错,如下:
可改为:
void Foo(int *array[10])
{
}
指针数组:用来存放指针的数组
char *keys[100] = { "wo","zei","tm","shuai" };//存放100个指针