在 C 语言中,指针和数组之间存在怎样的关联?数组名是否可以视为指针?
考察说明
考查对 C 语言中指针与数组关系的核心概念理解。
回答思路
- 【回答框架 1】数组名代表数组首元素的地址,但它不是指针变量,而是一个地址常量,不能进行赋值或自增自减操作。多数表达式中数组名会退化为指向首元素的指针,但 sizeof 和取地址运算符 & 是例外。
- 【回答框架 2】指针是保存地址的变量,可以指向数组元素,通过指针运算可以遍历数组。指针与数组在访问语法上可以互换,例如 a[i] 等价于 *(a+i),但指针本身可修改,数组名不可修改。
- 【回答框架 3】区分关键在于:数组名是常量地址,指针是变量地址。数组名在作为函数参数时会退化为指针,因此函数内无法直接通过数组名获取数组大小,需要使用额外参数传递长度。
- 【关键点 1】数组名是地址常量,不是指针变量。
- 【关键点 2】除 sizeof 和 & 外,数组名在表达式中退化为指向首元素的指针。
- 【关键点 3】a[i] 与 *(a+i) 在语法上等价。
- 【易错点 1】不要认为数组名是指针变量,它不能自增或赋值。
- 【易错点 2】对数组名使用 sizeof 得到整个数组字节数,而非指针大小。
- 【易错点 3】数组名作为函数参数时退化为指针,会丢失数组长度信息。