目录
1、指针数组
指针数组是数组,用来存放指针
int main()
{
int* parr[4];//存放整型指针的数组——指针数组
char* pch[4];//存放字符指针的数组——指针数组
return 0;
}
一种简单的指针数组应用方法
int main()
{
int arr1[] = {1,2,3,4,5};
int arr2[] = { 2,3,4,5,6 };
int arr3[] = {3,4,5,6,7};
int* parr[] = {arr1, arr2,arr3};
int i = 0;
for (i = 0; i < 3; i++)
{
int j = 0;
for (j=0;j<5;j++)
{
printf("%d ",*(parr[i]+j));
}
printf("\n");
}
return 0;
}
通过解引用parr[i] 来找到数组首元素地址,+j向后移动到对应元素
2、数组指针
数组指针是指针,指向数组的指针,可以存放数组的地址
int mian()
{
int* p = NULL;//p是整形指针——指向整形地址——存放整形地址
int* pc = NULL;//pc是字符指针——指向字符地址——存放字符地址
//数组指针——指向数组地址——存放数组地址
int arr[10] = {0};
//arr——首元素地址
//&arr[0]——首元素地址
//&arr——数组的地址
return 0;
}
实例:
int arr[10] = {1,2,3,4,5,6,7,8,9};
int(*p)[10] = 0;//p先和*组合,是个指针
char* arr[5];
char* (*pa)[5] = &arr;
//char*表示pa指向的数组的元素类型的char*
//*pa中*说明pa是指针
//pa是指针变量名
//[5]表示指向的数组是5个元素的
3、数组指针的应用
因为数组名就是首元素地址,数组arr的首元素是第一行,一个有5个元素的一维整型数组,所以可以使用数组指针int(*p)[5]来接收
#include<stdio.h>
void print(int(*p)[5],int x,int y)//参数是指针的形式
{
int i = 0;
for (i=0;i<x;i++)
{
int j = 0;
for (j = 0; j < y; j++)
{
printf("%d ", *(*(p + i) + j));//p[i][j]
}
printf("\n");
}
}
int main()
{
int arr[3][5] = { {1,2,3,4,5} ,{2,3,4,5,6} ,{3,4,5,6,7} };
print(arr,3,5);//arr————数组名——首元素地址
return 0;
}
一般至少到二维数组才会使用数组指针。
4、小结
int arr[5];
//arr是一个5个元素的整型数组
int* paee1[10];
//parr1是一个数组,该数组有10个元素,每个元素的类型是int*parr1,是指针数组
int(*parr2)[10];
//parr2是一个指针,该指针指向了一个数组,数组有是个元素,每个元素的类型是int,是数组指针
int(*parr3[10])[5];
//parr3是数组,该数组有10个元素,每个元素是一个指针,该数组指针指向的数组有5个元素,每个元素是int