开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情
指针 VS 数组
在我们之前的学习中,我们会学到数组的相关知识,通过学习指针,有助于将有关数组的知识扩宽。
在C++中,数组和指针是息息相关的,指针可以访问数组,同时可以用指针修改指针的相关内容。做到这一点的前提,是我们要知道,数组的数组名其实就是该数组在内存中的首地址。
例如在下面的例子中,我们会定义数组arr,同时让指针p指向它,通过for循环输出数组元素以及修改数组。
int arr[3] = { 1,2,3 };
int* p = arr;
//修改数组元素
for(int i = 0; i < 3; i++){
cin >> *(p + i);
}
//输出数组元素
for(int i = 0; i < 3; i++){
cout << *(p + i) << endl;
}
通过上面的例子我们知道,arr[1]其实就是我们的*(p + 1),而p这个指针所存放的地址就是数组的首地址。
指针数组与数组指针
指针数组
指针数组,换一种名称就是“指针的数组”,指针,修饰这个数组,也就是说,这个数组的任何一个元素都是指针。
定义:int* arr[3] = { 1,2,3 }
在32位操作系统中,指针在四个字节,所以arr数组由3个指针构成,即arr数组所占大小为12个字节。
数组指针
数组指针,可以说成“数组的指针”,arr变量就是一个指针,数组修饰这个指针,也就是说,这个指针存放着数组的首地址,也可以说成指针指向数组的首地址。
定义:int(* pa)[3] = { 1,2,3 }
那么pa就是一个指针,这个指针指向一个int [3]的数组。
我们知道,一个数组的名称其实就是该数组的首元素的首地址,那数组名称与数组指针都是首地址,那有什么区别呢?
例如,我们有一个数组char a[3],有一个数组指针char p[3],二者的区别就在于,a的首地址,是数组中首元素的首地址,而p的首地址,却是数组的首地址。换种方式说,a是char类型,a+1就是实实在在的+1,而p是char[4]类型的,p+1,实际上p会加4。虽然都是首地址,但是二者操作不同。
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 5 天,点击查看活动详情