【C语言】初阶指针下

指针

【C语言】初阶指针上



1.前言

上次我们讲了初阶指针的部分内容,今天我们将讲完剩下的部分。


2.二级指针

  1. 概念
    二级指针是用来存放一级指针的地址的指针。
    在这里插入图片描述
  2. 语法结构
    int*pa,其中 * 表示这个pa变量是指针,int表示pa指向的对象的类型是整形。
    int * * ppa,其中靠近ppa的 * 表示ppa是个指针,int * 表示ppa指向的对象的类型。
    类似地,三级指针,四级指针,……等的语法结构也是如此。
    一般地,有多少个 * 就表示它是几级指针。
  3. 二级指针的解引用
    已知,一级指针解引用访问到地址的内容,而二级指针解引用访问到一级指针的内容。
    在这里插入图片描述
    而对二级指针ppa解引用操作两次就可以访问到a,类似地,对三级指针就得解引用三次,四级指针就得解引用四次,……。但我们通常最多使用的是一级指针,偶尔用到二级指针,二级以上几乎看不到。

3.指针数组

首先,得清楚指针数组是数组还是指针?肯定是数组,后面我们学的数组指针才是指针。

  1. 指针数组的概念
    类比于整形数组、字符数组,整形数组是存放整形的数组,字符数组是存放字符的数组,那么指针数组是存放指针的数组。
  2. 指针数组的形式
int a = 10,b = 20,c = 30,d = 40,e = 50
int *arr[5] = {&a,&b,&c,&d,&e};

在这里插入图片描述数组的类型与数组元素的类型相同,都是int*。

  1. 例题
    使用一维数组模拟一个二位数组。假设我们要模拟一个三行四列的二维数组。
int main()
{
	int arr1 = {1,2,3,4};
	int arr2 = {2,3,4,5};
	int arr3 = {3,4,5,6};
	int* arr = {arr1,arr2,arr3};
	int i = 0;
	int j = 0;
	int rows = sizeof(arr)/sizeof(arr[0]);
	int columns = sizeof(arr1)/sizeof(arr1[0]);
	for(i = 0;i < rows;i++)
	{
		for(j = 0;j< columns;j++)
		{
			printf("%d ",arr[i][j]);
		}
		printf("\n");
	}
	return 0 ;
}

结果

在这里插入图片描述
思路

  • 我们需要几行的二维数组就创建几个一维数组,且创建的一维数组规模要相同。
  • 创建一个指针数组,数组的元素为各个一维数组的数组名。
  • 根据指针数组的的每个元素来访问每个元素对应的数组。

疑惑
大家可能对arr[i][j]这个表达式感到疑惑。arr[i]表示访问下标为i的数组元素,而这个元素又恰好是数组名,也就是说我们可以把arr[i]看成一个整体(看成数组名),数组名加上[]和j,不就是访问下标为j的元素,就这样利用循环,我们可以访问到三个一位数组的每个元素,从而实现模拟二维数组。


总结

我们已经把指针的初阶部分讲完,已经可以完成简单的指针练习了,快去刷题吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值