前言
指针和数组之间存在着紧密的关系。在本文中,我们将探讨指针和数组的关系、指针算术和数组遍历、多维数组与指针以及指针数组和数组指针。
一、人物简介
- 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。

- 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。

二、指针和数组的关系
- 在C语言中,数组名是指向数组首元素的指针。
- 示例代码:
- #include <stdio.h>
- int main() {
- int arr[5] = {1, 2, 3, 4, 5};
- int *ptr = arr; // 数组名作为指针使用
-
- // 使用指针访问数组元素
- printf("ptr指向 %d \n", *ptr);
- return 0;
- }
复制代码
- 在上述示例中,我们将数组名arr赋给指针ptr,并使用*ptr访问数组的第一个元素。
- 输出结果
三、指针算术和数组遍历
- 指针算术允许我们通过增加或减少指针的值来访问数组中的不同元素。
- 通过改变ptr的值,实现对数组的遍历
- 示例代码:
- #include <stdio.h>
- int main() {
- int arr[5] = {1, 2, 3, 4, 5};
- int *ptr = arr;
- // 使用指针算术访问数组元素
- for (int i = 0; i < 5; i++) {
- printf("ptr指向 %d \n", *(ptr + i));
- }
- return 0;
- }
复制代码- ptr指向 1
- ptr指向 2
- ptr指向 3
- ptr指向 4
- ptr指向 5
复制代码 四、多维数组与指针
- C语言中支持多维数组,我们同样可以使用指针来访问多维数组的元素。
- 示例代码:
- #include <stdio.h>
- int main() {
- int arr[3][2] = {{1, 2}, {3, 4}, {5, 6}};
- int (*ptr)[2] = arr;
- // 使用指针访问多维数组元素
- for (int i = 0; i < 3; i++) {
- for (int j = 0; j < 2; j++) {
- printf("%d ", *(*(ptr + i) + j));
- }
- printf("\n");
- }
- return 0;
- }
复制代码
- 我们定义了一个二维数组arr,并将其赋给指针ptr。
- 通过使用指针算术和双重指针解引用,访问了多维数组中的每个元素。
- 输出结果
五、指针数组和数组指针
- 指针数组是一个数组,其元素都是指针类型;
- 数组指针是一个指针,指向一个数组。
- 示例代码:
- #include <stdio.h>
- int main() {
- int arr1[] = {1, 2, 3, 4, 5}; // 数组
- int *arr2[5]; // 指针数组
- int (*arr3)[5]; // 数组指针
- int i;
- // 初始化指针数组
- for (i = 0; i < 5; i++) {
- arr2[i] = &arr1[i];
- }
- // 打印指针数组中的元素
- printf("指针数组中的元素:\n");
- for (i = 0; i < 5; i++) {
- printf("%d ", *arr2[i]);
- }
- // 初始化数组指针
- arr3 = &arr1;
- // 打印数组指针指向的数组中的元素
- printf("\n数组指针指向的数组中的元素:\n");
- for (i = 0; i < 5; i++) {
- printf("%d ", (*arr3)[i]);
- }
- return 0;
- }
复制代码
- 我们定义了一个整型数组arr1,一个指针数组arr2和一个数组指针arr3。
- 指针数组arr2是一个包含5个元素的数组,每个元素都是一个指向整型变量的指针。
- 我们使用arr2 = &arr1将指针数组的每个元素指向arr1数组的对应元素。
- 然后,我们通过*arr2解引用指针数组中的每个元素,并打印出其值。
- 数组指针arr3是一个指向包含5个整型元素的数组的指针。
- 我们通过arr3 = &arr1将数组指针指向arr1数组。
- 然后,通过(*arr3)访问数组指针所指向的数组中的每个元素,并打印出其值。
- 输出结果
- 指针数组中的元素:
- 1 2 3 4 5
- 数组指针指向的数组中的元素:
- 1 2 3 4 5
复制代码 小结
通过这篇文章,我们学会了
1、利用指针访问和遍历数组
2、指针数组和数组指针的区别
<blockquote>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |