- 计算数组大小:sizeof(arr)
- 对数组名取地址:&arr
得到数组指针,步长是整个数组的长度
数组指针的定义方式数组名是一个指针常量,指针的指向不可以修改,而指针指向的值可以修改
- 先定义数组类型,再通过类型定义数组指针
void test0201() {
int arr[5] = { 1,2,3,4,5 };
//array_type表示存放5个int类型元素的数组的数组类型
typedef int(array_type)[5];
array_type arr2;
for (size_t i = 0; i < 5; i++)
{
arr2[i] = 100 + i;
}
for (size_t i = 0; i < 5; i++)
{
printf("%dn", arr2[i]);
}
//arr2[5] = 0;
array_type* arrp = &arr;
for (size_t i = 0; i < 5; i++)
{
printf("%dn", (*arrp)[i]);
}
}
- 先定义数组指针类型,再通过类型定义数组指针
void test0202() {
int arr[5] = { 1,2,3,4,5 };
typedef int(*array_type)[5];
array_type arrp = &arr;
for (size_t i = 0; i < 5; i++)
{
printf("%dn", (*arrp)[i]);
}
}
- 直接定义数组指针变量
void test0203() {
int arr[5] = { 1,2,3,4,5 };
int(*p)[5] = &arr;
for (size_t i = 0; i < 5; i++)
{
printf("%dn", (*p)[i]);
}
}
二维数组
除了sizeof(arr)和&arr外,二维数组名称是指向第一个一维数组的数组指针
void test0301() {
int arr[3][3] = {1,2,3,4,5,6,7,8,9};
int(*p)[3] = arr;
printf("%dn",sizeof(p));//输出4
printf("%dn",sizeof(*p));//输出12
int(*parray)[3][3] = &arr;
printf("%dn", arr[1][2]);//输出6
printf("%dn", p[1][2]);//输出6
printf("%dn", *(*(p+1)+2));//输出6
}
二维数组做函数参数
//void printArray03(int arr[][3], int row, int col);
//void printArray03(int (*arr)[3], int row, int col);
void printArray03(int arr[3][3],int row,int col) {
for (size_t i = 0; i < row; i++)
{
for (size_t j = 0; j < col; j++)
{
//printf("%d ", arr[i][j]);
printf("%d ", *(*(arr+i)+j));
}
}
}
数组指针和指针数组
数组指针:指向数组的指针
指针数组:由指针组成的数组



