深入理解C语言一维数组的本质:数组名、指针常量与访问细节
资料合集下载链接:
https://pan.quark.cn/s/472bbdfcd014
在C语言中,一维数组是编程的基础结构,尤其在多维数组的上下文中,一维数组往往作为其组成部分出现。理解一维数组的存储方式及其数组名的本质,对于避免常见错误至关重要。本文基于一堂课堂笔记,探讨一维数组作为连续线性空间的特点,数组名的特殊含义(包括取地址时的步长和sizeof操作),以及其作为指针常量的本质。此外,我们还将触及数组下标访问的灵活性,包括负下标的使用(但需注意潜在风险)。通过详细的代码示例和运行结果,帮助读者加深对这些概念的掌握。
本文假设读者有基本的C语言知识,我们将逐步展开解释,并提供可直接编译运行的代码。
一维数组的基本概念
一维数组在内存中是一个连续的线性空间,每个元素紧邻存放。例如,一个int类型的数组,每个元素占用4字节(在大多数系统中),地址依次递增。数组名(如arr
)通常指向数组的第一个元素,但严格来说,数组名本身不是一个指针变量,而是一个符号,表示数组的起始位置。
这意味着:
- 你可以使用数组名像指针一样访问元素(如
arr[0]
等价于*(arr + 0)
)。 - 但数组名不能被修改指向,因为它不是变量。
代码示例:演示一维数组的连续存储
以下代码创建一个int数组,打印每个元素的地址,展示连续性。
#include <stdio.h>int main() {int arr[5] = {10, 20, 30, 40, 50};printf("数组首地址: %p\n", (void*)arr);for (int i = 0; i < 5; i++