C语言数组指针

您所在的位置:网站首页 邮编都是0开头吗 C语言数组指针

C语言数组指针

2023-06-26 12:23| 来源: 网络整理| 查看: 265

文章目录 1 数组指针的定义2 访问数组的元素3 关于数组指针的p++、*++p、(*p)++参考

1 数组指针的定义

我们可以定义一个指向数组的指针,例如:

int arr[] = { 99, 15, 100, 888, 252 }; int *p = arr;

arr 本身就是一个指针,可以直接赋值给指针变量 p。arr 是数组第 0 个元素的地址,所以int *p = arr;也可以写作int *p = &arr[0];。也就是说,arr、p、&arr[0] 这三种写法都是等价的,它们都指向数组第 0 个元素,或者说指向数组的开头。 再强调一遍,“arr 本身就是一个指针”这种表述并不准确,严格来说应该是“arr 被转换成了一个指针”。

如果一个指针指向了数组,我们就称它为数组指针(Array Pointer)

对指针变量进行加法和减法运算时,是根据数据类型的长度来计算的。如果一个指针变量 p 指向了数组的开头,那么 p+i 就指向数组的第 i 个元素;如果 p 指向了数组的第 n 个元素,那么 p+i 就是指向第 n+i 个元素;而不管 p 指向了数组的第几个元素,p+1 总是指向下一个元素,p-1 也总是指向上一个元素。

更改上面的代码,让 p 指向数组中的第二个元素:

#include int main(){ int arr[] = { 99, 15, 100, 888, 252 }; int *p = &arr[2]; //也可以写作 int *p = arr + 2; printf("%d, %d, %d, %d, %d\n", *(p-2), *(p-1), *p, *(p+1), *(p+2) ); return 0; }

运行结果: 99, 15, 100, 888, 252

2 访问数组的元素

引入数组指针后,我们就有两种方案来访问数组元素了,一种是使用下标,另外一种是使用指针。 1) 使用下标 也就是采用 arr[i] 的形式访问数组元素。如果 p 是指向数组 arr 的指针,那么也可以使用 p[i] 来访问数组元素,它等价于 arr[i]。 2) 使用指针 也就是使用 *(p+i) 的形式访问数组元素。另外数组名本身也是指针,也可以使用 *(arr+i) 来访问数组元素,它等价于 *(p+i)。

3 关于数组指针的p++、*++p、(*p)++

假设 p 是指向数组 arr 中第 n 个元素的指针,那么 *p++、*++p、(*p)++ 分别是什么意思呢?

*p++ 等价于 *(p++),表示先取得第 n 个元素的值,再将 p 指向下一个元素,上面已经进行了详细讲解。

*++p 等价于 *(++p),会先进行 ++p 运算,使得 p 的值增加,指向下一个元素,整体上相当于 *(p+1),所以会获得第 n+1 个数组元素的值。

(*p)++ 就非常简单了,会先取得第 n 个元素的值,再对该元素的值加 1。假设 p 指向第 0 个元素,并且第 0 个元素的值为 99,执行完该语句后,第 0 个元素的值就会变为 100

参考

部分内容参考于C语言中文网;一个很不错的编程网站,建议大家多看看。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3