【C语言】指针进阶第二站,指针数组
[TOC]
嘟嘟嘟🚌,指针进阶的第二站指针数组
到了!
上车上车!
回顾一下第一站🚍的内容:字符指针
指针数组
数组是一种类型的数的集合
- 整型数组的元素都是int类型
- 指针数组的元素都是指针变量
1 | int* arr1[10];//整型指针的数组 |
参考这一份示意图
示例1:定义多个字符指针
在上一站的字符指针里面,提到了可以直接用指针来创建一个常量字符串
同理,我们可以将多个指针放在一块,凑成指针数组,一次性创建多个指向常量字符串
的指针
1 | int main() |
示例2:存放数组名的数组
在之前的学习中,我们知道:数组名代表数组首元素的地址
可以说,数组名本质上也是一个指针
既然是指针,就能放进指针数组里面
1 | int main() |
这串代码中,我们需要了解的是arr[i][j]
和*(*(arr+i)+j)
之间的关系
以下内容,我的理解可能有偏差。若有错误,还请大佬们无情指正!
arr[i][j]和*(*(arr+i)+j)
它们都是访问数组的形式,用到了不同的操作符
但表达的含义相同:
下标为i、j的元素
在内存中,数据的存储是连续的
创建一个二维数组,可以看到两行的数据是连续存放在数组里面的
1 | int arr4[2][2]={{1,2},{3,4}}; |
既然是连续的,我们就可以用指针++的形式来访问二维数组里面的所有元素
*(arr+i)
指向第i行元素*(arr+i)+j
指向第i行下标为j的元素的地址*(*(arr+i)+j)
再次解引用,得到j元素
数组名的本质是地址,是该数组首元素的地址
二维数组的首元素是第一行
,数组名arr就是第一行的地址
我们可以把二维数组的每一行理解为独立的一个一维数组
这时候,二维数组的形式和上述代码中int* arr[]
数组的形式就相同了
1 | int arr1[] = { 1,2,3,4,5 }; |
因此,我们可以用二维数组访问的形式来访问int* arr[]
数组
int* arr[]和二维数组的不同
int*arr数组里的元素arr1,arr2,arr3的地址是连续存放的
这里设计到一个新概念:数组指针
将在下一站🚌讲解!
但是它们对应的各自的数组内数据并不连续
如:arr1和arr2这两个数组各自元素的地址并不连续
示例3:存放二级指针的数组
既然一级指针可以放进数组里,二级指针也是指针,同样也能塞进数组里
下面这串代码里面的arr2就是一个存放二级指针的数组
1 |
|
结语
🚍第二站的路程到这里就结束了!
敬请期待下一站的数组指针
航程吧!
如果你对博客内容有疑问,欢迎在评论区提出哦,万分感谢!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 慕雪的寒舍!
评论