C语言:定义指向二维数组的指针变量
Posted 小威威__
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言:定义指向二维数组的指针变量相关的知识,希望对你有一定的参考价值。
C语言:定义指向二维数组的指针变量
标签: C语言 二维数组 指针
by 小威威
1.引入
我们知道,要在函数中处理数组,一般要给函数传递指针。那么,对于一维int数组a[10],我们可以定义一个int *类型的指针变量p指向该数组。为什么这样定义?(按照我下面的理解方式有利于理解二维数组指针的定义)
首先我们可以把这个一维数组中的10个元素当作10个数组,每个数组都只有一个元素,即指针在每一次移动,都只需指向一个int类型的变量(通过指针对数组进行操作),故定义指向一个int变量的指针。
那么对于二维数组a[3][2],我们要定义一个 int (*p) [2]的指针。首先我们来分析一下这个指针的类型。它也等价于这种形式:int [2] *p。意思是定义一个指向两个int类型变量的指针。当你学了结构体,你就对这种数据类型的定义方式不陌生了。但没有学过结构体,就有点抽象了。我先举个简单的例子:例如我定义一个数组int a[10],其实它也可以表示成另一种形式:int [10] a。意思是定义一个变量a,它是int [10]类型的,即它是一个拥有10个int变量长度的变量,即是数组。那对于二维数组a[3][2],为什么要定义一个指向两个int变量的指针呢?
按照前面对一维数组的分析,我们可以把这个二维数组看作是三个数组,每个数组有两个元素。指向该二维数组的指针在进行移动时,它指向的是一整个数组,即两个int类型,所以需要定义int [2] 类型的指针变量。
由此我们可以总结规律,指向二维数组a[i][j]的指针类型必然是 int [j] *类型。
2.实例
# include <stdio.h>
int main(void)
int a[4][3] =
1, 2, 12,
3, 4, 34,
5, 6, 56,
7, 8, 78
;
int (*pArr) [3]; //一定要加上括号,因为[]的优先级高于*
pArr = a;
for (int i = 0; i < 4; i++)
for (int j = 0; j < 3; j++)
printf("%d ", pArr[i][j]);
return 0;
3.提醒
有人会说难道不能定义一个int**的指针类型吗?那你可能是被动态数组影响到了。其实我前面讲的都是针对于静态数组。对于静态数组,它在内存中所占的空间是连续的,只需要用到地址,所以只要一颗;而动态数组是先建立一个一维数组,然后分别在一维数组的元素内再开辟一段连续的空间,它就需要地址的地址,所以需要两个*。这很重要很重要噢!!!
以上内容皆为本人观点,欢迎大家提出批评和指导,我们一起探讨!
以上是关于C语言:定义指向二维数组的指针变量的主要内容,如果未能解决你的问题,请参考以下文章