C语言数组指针

C语言数组指针教程

C 语言 中,数组 是用来保存同一种 类型 的一组数据的集合,同时,数组中的所有元素在内存中是连续存放的,也就是数组的每个元素的地址在内存中是连续的。

在 C 语言中,我们可以将数组名看成是一个 指针,它指向数组的第 1 个元素,也就是索引为 0 的元素,在 C 语言中,我们将第 1 个元素的地址称为数组的首地址。

注意,我们可以将数组名看成是指针,但其实它们并不完全等价,因为数组名其实是一个 常量,不可以被修改,而指针时可以移动的,即是一个 变量

C语言数组指针详解

语法

int arr[10];

说明

我们定义了一个含有 10 个元素的数组,数组名为 arr,我们可以认为 arr 是一个指针,其指向了数组的第一个元素。

案例

C语言数组指针

C 语言的数组名可以看成指针

#include <stdio.h> int main() { printf("嗨客网(www.haicoder.net)\n\n"); int arr[3] = {1, 3, 4}; int i = 0; for(i = 0; i < 3; i++) { printf("arr[%d] = %d\n", i, arr[i]); } return 0; }

程序运行后,控制台输出如下图所示:

08_C语言数组指针.png

我们首先,定义了一个 int 类型 的数组,该数组有三个元素,接着,我们使用了 for 循环 遍历了这三个元素,既然,数组名可以当做指针,并且数组元素在内存里是连续的。

因此,我们就可以使用数组名来遍历数组元素,我们修改程序如下:

#include <stdio.h> int main() { printf("嗨客网(www.haicoder.net)\n\n"); int arr[3] = {1, 3, 4}; int i = 0; for(i = 0; i < 3; i++) { printf("arr[%d] = %d\n", i, *(arr+i)); } return 0; }

程序运行后,控制台输出如下图所示:

09_C语言数组指针.png

这次,我们使用了数组名来遍历了数组的每一个元素,我们将数组名当成了指针,并且不停的将指针往后偏移,得到数组元素的地址,再通过 * 符取得数组元素的值。

其中,在 *(arr+i) 这个表达式中,arr 是数组名,指向数组的第 0 个元素,表示数组首地址, arr+i 指向数组的第 i 个元素,*(arr+i) 表示取第 i 个元素的数据,它等价于 arr[i]。

C语言数组指针

使用指针指向数组名

#include <stdio.h> int main() { printf("嗨客网(www.haicoder.net)\n\n"); int arr[3] = {1, 2, 3}; int *pArr = arr; int i = 0; for(i = 0; i < 3; i++) { printf("pArr = %d\n", *(pArr+i)); } return 0; }

程序运行后,控制台输出如下图所示:

10_C语言数组指针.png

我们直接定义了一个指针,其指向了数组名,接着,我们就直接可以通过指针的移动来访问数组中的元素。

C语言数组指针

使用指针指向数组名

#include <stdio.h> int main() { printf("嗨客网(www.haicoder.net)\n\n"); int arr[3] = {1, 2, 3}; int *pArr = arr; int i = 0; for(i = 0; i < 3; i++) { printf("pArr = %d\n", *pArr++); } return 0; }

程序运行后,控制台输出如下图所示:

11_C语言数组指针.png

我们使用了指针的自增加上 for 循环,实现了访问数组的所有元素,这里,*pArr++ 这种写法,是先使用 *pArr 取出数组的第一个元素,接着,再次执行 pArr++,就是将指针移向数组的下一个元素。

C语言数组指针总结

在 C 语言中,我们可以将数组名看成是一个指针,它指向数组的第 1 个元素,也就是索引为 0 的元素,在 C 语言中,我们将第 1 个元素的地址称为数组的首地址。

注意,我们可以将数组名看成是指针,但其实它们并不完全等价,因为数组名其实是一个常量,不可以被修改,而指针时可以移动的,即是一个变量。