MST
星途 面试题库

面试题:C语言一维数组名与指针运算的深度理解

已知有一个一维数组`int arr[10];`,假设数组名`arr`和指针`int *ptr = arr;`,它们在进行指针运算时存在哪些细微的差别?请详细阐述并举例说明,同时解释为什么会有这些差别。
25.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 差别阐述
    • 数组名arr是一个常量指针,它指向数组的起始地址,其值在数组的生命周期内不能被修改。而指针ptr是一个变量指针,它的值可以被修改,指向其他内存地址。
  2. 举例说明
    #include <stdio.h>
    int main() {
        int arr[10];
        int *ptr = arr;
        // 尝试修改数组名arr的值,这会导致编译错误
        // arr++;
        // 修改指针ptr的值是合法的
        ptr++;
        return 0;
    }
    
  3. 原因解释
    • 数组名arr代表数组的首地址,这个地址在数组定义时就固定下来了,它是数组本身的一个属性,不能被赋值修改,所以不支持像arr++这样的操作。而指针ptr是一个普通的变量,存储的是内存地址,它的值可以根据需要重新赋值,ptr++操作会使它指向下一个元素的地址(这里ptr类型为int *,所以ptr++会使ptr的地址值增加sizeof(int)大小)。