赞
踩
看到标题的小伙伴可能会有点疑惑,什么是指针数组,数组指针??傻傻分不清楚,不怕,听我慢慢道来。
要想弄清楚这两个概念,我们不妨举几个例子:
1、数组:
int arr[5] = {1,2,3,4,5};
这就是最简单的数组,数组中每个元素都是int类型,下面的图片帮助大家很容易理解。
数组可以将相同类型的数据整合到一起,你可以通过下标的方式或者指针的方式来访问,在这里不多赘述。
2、指针数组:
int *parr1[10]
形如以上形式的,叫做指针数组,其中:paar1先与[10]结合为parr1[10],为一个有10个元素的数组,其次再与int*结合,及每个元素的类型是int*。以下图片更方便大家理解:
注意:指针数组,本质上parr1是数组,因为优先级的关系,parr1先与[]结合,但是接下来要介绍的数组指针正好相反。
3、数组指针
int(*parr2)[10]
在第2点已经说过,数组指针因为()的缘故,优先级很高,所以parr2先与*结合为指针,并且是指向数组的指针,后面的[10]表示指向的数组里面有10个元素,每个元素为int型。下面的图更方便大家理解:
注意:此时的parr2是一个指针,如果把指针名parr2去掉,剩余的部分就是指针类型,:int(*)[10]
这就是数组指针,其实并没有想象的那么神秘!
4、数组指针的应用
这里为大家分享一下数组指针的几个小应用。
int(*pa)[5] = &arr
注意:
- void print_arr2(int(*arr)[5], int row, int col)
- {
- int i = 0;
- int j = 0;
- for (i = 0; i < row; i++)
- {
- for (j = 0; j < col; j++)
- {
- printf("%d ", arr[i][j]);
- }
- printf("\n");
- }
- }
- int main()
- {
- int arr[3][5] = { 1,2,3,4,5,6,7,8,9,10 };
- //数组名arr,表示首元素的地址
- //但是二维数组的首元素是二维数组的第一行
- //所以这里传递的arr,其实相当于第一行的地址,是一维数组的地址
- //可以数组指针来接收
- print_arr2(arr, 3, 5);
- return 0;
- }
运行结果:
注意:
想必大家看过我的blog应该对数组指针与指针数组有了初步的了解
这也是我本人第一次写blog,还请各位大佬手下留情!
最后,放一道思考题:
请问以下代码代表什么意思:
int(*parr3[10])[5]
答案就是:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。