一:引入
什么是指针数组?
整型数组:存放整型的数组,如int arr[10];
字符数组:存放字符的数组,如:char ch[10];
指针数组:存放指针的数组,如:int*arr[10],char *ch[10];
二:指针数组
指针数组是存放指针的数组,指针数组的每个元素都是用来存放地址(指针)的。
指针数组举例:
#include <stdio.h> int main() { int i = 0; int a = 1; int b = 2; int c = 3; int d = 4; int e = 5; int* arr[5] = { &a,&b,&c,&d,&e };//指针数组存放的是a,b,c,d,e的地址 int** p = arr;//*p说明p是指针变量, for (i = 0; i < 5; i++) { printf("%d ", *(*(p+i))); } return 0; }
三:指针数组模拟二维数组
#include <stdio.h> int main() { int arr1[] = { 1,2,3,4,5 }; int arr2[] = { 2,3,4,5,6 }; int arr3[] = { 3,4,5,6,7 }; int* p[] = {arr1,arr2,arr3};//数组名是首元素的地址,类型是int*,都存放在p数组中 int i = 0; for (i = 0; i < 3; i++) { int j = 0; for (j = 0; j < 5; j++) { //printf("%d ", *(*(p + i) + j)); //p+i得到的是数组p的元素的地址,*(p+i)得到的是arr1,arr2,arr3, //也就是上面三个数组的数组名,各首元素地址, //首元素地址+j,然后再解引用*,得到各数组的元素 printf("%d ", p[i][j]); } printf("\n"); } return 0; }