指针——指针数组、数组指针

(一)指针数组

1、本质:指针数组的本质任然是数组

2、基本格式:int* arr[5]

3、应用:如尝试使用指针来模拟二维数组

先来看代码

#include<stdio.h>
//指针数组——模拟实现二维数组
int main()
{
	int a[5] = { 1,2,3,4,5 };//定义两个数组a,b
	int b[5] = { 1,2,3,4,5, };
	int* arr[2] = { a,b };//定义一个数组存放a和b,由于数组名为首元素地址,所以该数组类型为指针
	int i, j = 0;//打印a,b的元素
	for (i = 0;i < 2;i++)
	{
		for (j = 0;j < 5;j++)
		{
			printf("% d", *(arr[i] + j));//解引用,arr[i]+j 指向第i行,第j列,然后*(arr[i]+j)取出元素
		}
		printf("\n");
	}
	return 0;
}

具体原理可以看代码注释

(二)数组指针

1、数组指针基本知识

(1)本质:指针

(2)写法:

 int arr[5] = { 0 }; //定义一个数组

 int (*parr) [5] = &arr;//&arr取的是整个数组的地址

double* b[5] = {0};//定义一个指针数组

double*(*pb)[5] = &b;//(*pb)表明是个指针,[5]表示指向数组,double*说明指向的数组类型,也就是该指针的类型

2、数组名和&数组名的区别

(1)数组名:在之前的学习中我们已经知道了数组名就是数组首元素的地址。

(2)&数组名:&数组名也是指向数组的首元素。。。

?或许你现在很疑惑,既然这两种方式都会指向数组的首元素,那么究竟有什么不同呢

先来看一段代码:

  

显然,根据上图我们可以知道,arr和&arr所指向的位置是相同的,但其本质是不同的!!!

(3)不同点:类型不同

        1.数组名:代表的是数组首元素的地址

        2.&数组名:是整个数组的地址

由上图所示,我们可以看出

(1)数组名和&数组名使用指针来写的时候格式不同

(2)arr 和 arr+1 之间的地址相差了4个字节,也就是一个元素;&arr 和 &arr+1 则是相差了40个字节,也就是一个数组的大小

3、练习

(1)对于该代码:int(*pa[10])[5] 你认为是什么呢?

(2)定义一个二维数组,尝试使用函数的形式来打印其中的元素,要求形参为数组指针类型

(答案将在下一篇文章中呈现,希望读者能自己敲一敲!!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值