目录
一、指针数组基础概念
- 就是同时存储 多个地址,把地址 作为 一种值存放在数组中
本质:
数组前面类型 决定 数组中 存放 的数据类型:int*代表数组中存放地址,int 代表数组中存放 整型
注意 指针数组的 类型是 int*
#include<stdio.h>
int main()
{
int a = 10;
int b = 20;
int c = 30;
int* pa = &a;
int* pb = &b;
int* pc = &c;
//指针数组 就是存储 多个地址
int* parr[10] = { &a, &b, &c };//注意 指针数组的 类型是 int*
int i = 0;
for (i = 0; i < 3; i++)
{
printf("%d", *(parr[i]));
}
return 0;
}
二、指针数组模拟二维数组:两种写法
- 第一种写法:(数组名等于首元素地址 ( arr = &arr[0] ))(大部分情况下)
- parr中存放的就是各个数组的首元素地址,所以可以使用 [j] 来获取某个数组(首元素地址+j )位置的元素(起到访问各个数组的全部元素的作用)
- parr[1]相当于arr1,parr[1][j]相当于arr1[j]在循环,j循环结束换行 就类似二维数组了
- 第二种写法:
- parr 是 指针数组名 ,parr[1]就相当于arr1,可以把parr[i][j] 这个写法 理解为arr1[j] ,做到类似于 二维数组 (但不等同于)(本质:空间上是一维数组,逻辑上是二维数组)
- 能够写成类似二维数组样子:说明 [ ] 就是操作符 ,可以使用 添加使用
int main()
{
int arr1[10] = { 1,2,3,4 };
int arr2[10] = { 2,3,4,5 };
int arr3[10] = { 3,4,5,6 };
int arr4[10] = { 4,5,6,7 };
int* parr[4] = { arr1, arr2, arr3, arr4 };
int i = 0;
// i 遍历 { arr1, arr2, arr3, arr4 }(就是遍历4个arr,数组名arr 就是数组首元素地址)
for (i = 0; i < 4; i++)
{
int j = 0;
// j 遍历 { arr1, arr2, arr3, arr4 }各数组 中 其他 元素(进到数组中)
for (j = 0; j < 4; j++)
{
//第一种写法:
printf("%d ", *(parr[i] + j));
//parr[1]相当于arr1,parr[1][j]相当于arr1[j]在循环,j循环结束换行就成二维数组了
//第二种写法:空间上是一维数组,逻辑上是二维数组
printf("%d ", parr[i][j]);
//这里不代表这个是二维数组(写成这个形式而已)
//能够写成类似二维数组样子:说明 [ ] 就是操作符 ,可以使用
}
printf("\n");
}
return 0;
}
使用其中一种方法 的 输出效果