【C语言】指针数组——相关知识详解

目录

一、指针数组基础概念

二、指针数组模拟二维数组:两种写法


一、指针数组基础概念

  • 就是同时存储 多个地址,把地址 作为 一种值存放在数组中

本质:

        数组前面类型 决定 数组中 存放 的数据类型: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;
}

使用其中一种方法 的 输出效果

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值