第3课_数组与指针
热度🔥:143 免费课程
授课语音
数组与指针的关系
在 C 语言中,数组与指针有着密切的关系,理解它们之间的联系对于高效编写和调试代码非常重要。数组是一组相同类型数据的集合,而指针是用来存储内存地址的变量。在许多情况下,数组的名字可以看作是一个指向其第一个元素的指针。
1. 数组与指针的基本关系
1.1 数组名与指针
- 数组名本质上是一个指向数组首元素的指针。
- 通过指针运算可以访问数组中的其他元素。
例如:
- 如果
arr
是一个数组,则arr
等价于&arr[0]
。 *(arr + i)
等价于arr[i]
。
2. 数组与指针的特性对比
特性 | 数组 | 指针 |
---|---|---|
固定性 | 数组名是固定的,不可修改 | 指针变量的值可以改变 |
数据访问 | 使用索引访问,如 arr[i] |
使用指针偏移,如 *(ptr + i) |
存储 | 顺序存储 | 可以指向任意内存地址 |
3. 数组与指针的常见操作
3.1 通过指针操作数组
指针可以用来遍历和修改数组中的元素。
3.2 函数传递数组
数组作为函数参数时,实际上传递的是指向数组首元素的指针。
4. 代码案例
案例 1: 使用指针访问数组元素
#include <stdio.h>
int main() {
int arr[5] = {10, 20, 30, 40, 50}; // 定义一个包含 5 个整数的数组
int *ptr = arr; // 将指针指向数组的首元素
// 遍历数组并输出元素
printf("通过指针访问数组元素:\n");
for (int i = 0; i < 5; i++) {
printf("arr[%d] = %d\n", i, *(ptr + i)); // *(ptr + i) 等价于 arr[i]
}
return 0;
}
运行结果:
通过指针访问数组元素:
arr[0] = 10
arr[1] = 20
arr[2] = 30
arr[3] = 40
arr[4] = 50
案例 2: 函数传递数组指针
#include <stdio.h>
// 定义一个函数,接收数组的指针,并输出数组的元素
void printArray(int *array, int size) {
for (int i = 0; i < size; i++) {
printf("array[%d] = %d\n", i, *(array + i)); // *(array + i) 访问数组元素
}
}
int main() {
int arr[4] = {5, 15, 25, 35}; // 定义一个包含 4 个整数的数组
printf("通过函数打印数组元素:\n");
printArray(arr, 4); // 将数组的首地址传递给函数
return 0;
}
运行结果:
通过函数打印数组元素:
array[0] = 5
array[1] = 15
array[2] = 25
array[3] = 35
案例 3: 修改数组元素的值
#include <stdio.h>
// 定义一个函数,接收数组指针并修改其元素
void modifyArray(int *array, int size) {
for (int i = 0; i < size; i++) {
*(array + i) *= 2; // 将数组元素的值加倍
}
}
int main() {
int arr[3] = {2, 4, 6}; // 定义一个包含 3 个整数的数组
printf("修改前的数组元素:\n");
for (int i = 0; i < 3; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
modifyArray(arr, 3); // 调用函数修改数组元素
printf("修改后的数组元素:\n");
for (int i = 0; i < 3; i++) {
printf("arr[%d] = %d\n", i, arr[i]);
}
return 0;
}
运行结果:
修改前的数组元素:
arr[0] = 2
arr[1] = 4
arr[2] = 6
修改后的数组元素:
arr[0] = 4
arr[1] = 8
arr[2] = 12
通过以上代码案例,我们可以清楚地看到数组与指针之间的关系及其在实际编程中的应用。理解这些知识点有助于更灵活地操作数组,编写更高效的代码。