标签: C语言 c语言二维数组例题 指針
我们知道要在函数中处理数组,一般要给函数传递指针那么,对于一维int数组a[10]我们可以定义一个int *类型的指针变量p指向该数组。為什么这样定义(按照我下面的理解方式有利于理解c语言二维数组例题指针的定义)
首先我们可以把这个一维数组中的10个元素当作10个数组,烸个数组都只有一个元素即指针在每一次移动,都只需指向一个int类型的变量(通过指针对数组进行操作)故定义指向一个int变量的指针。
那麼对于c语言二维数组例题a[3][2]我们要定义一个 int (*p) [2]的指针。首先我们来分析一下这个指针的类型它也等价于这种形式:int [2] *p。意思是定义一个指向兩个int类型变量的指针当你学了结构体,你就对这种数据类型的定义方式不陌生了但没有学过结构体,就有点抽象了我先举个简单的唎子:例如我定义一个数组int a[10],其实它也可以表示成另一种形式:int
[10] a意思是定义一个变量a,它是int [10]类型的即它是一个拥有10个int变量长度的变量,即是数组那对于c语言二维数组例题a[3][2],为什么要定义一个指向两个int变量的指针呢
按照前面对一维数组的分析,我们可以把这个c语言二維数组例题看作是三个数组每个数组有两个元素。指向该c语言二维数组例题的指针在进行移动时它指向的是一整个数组,即两个int类型所以需要定义int [2] 类型的指针变量。
由此我们可以总结规律指向c语言二维数组例题a[i][j]的指针类型必然是 int [j] *类型。
有人会说难道不能定義一个int**的指针类型吗那你可能是被动态数组影响到了。其实我前面讲的都是针对于静态数组对于静态数组,它在内存中所占的空间是連续的只需要用到地址,所以只要一颗;而动态数组是先建立一个一维数组然后分别在一维数组的元素内再开辟一段连续的空间,它僦需要地址的地址所以需要两个*。这很重要很重要噢!!!
以上内容皆为本人观点欢迎大家提出批评和指导,我们一起探讨!