MST

星途 面试题库

面试题:C语言指针:数组与指针的关系分析

假设有一个整型数组 `int arr[5] = {1, 2, 3, 4, 5};`,定义一个指针 `int *ptr = arr;`。请解释 `ptr`、`ptr + 1`、`*(ptr + 1)`、`arr[1]` 之间的关系,并说明它们的值分别是什么,同时阐述指针算术运算在这种情况下的原理。
26.3万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. ptr
    • 关系ptr 是一个指向数组 arr 首元素的指针。
    • :它的值是数组 arr 首元素(即 arr[0])的内存地址。假设数组 arr 首地址为 0x100(实际地址由编译器和运行环境决定),那么 ptr 的值就是 0x100
  2. ptr + 1
    • 关系ptr + 1 是指针 ptr 进行算术运算后的结果。它指向数组 arr 中第二个元素的位置。
    • :由于 ptr 指向 int 类型的数组,int 类型在一般情况下占 4 个字节(具体取决于编译器和系统)。如果 ptr 的值为 0x100,那么 ptr + 1 的值就是 0x100 + 4 = 0x104,即指向数组 arr 中第二个元素 arr[1] 的内存地址。
  3. *(ptr + 1)
    • 关系*(ptr + 1) 是对 ptr + 1 所指向的内存地址进行解引用操作,得到该地址存储的值。
    • :因为 ptr + 1 指向 arr[1],所以 *(ptr + 1) 的值就是 arr[1] 的值,即 2
  4. arr[1]
    • 关系arr[1] 是数组 arr 的第二个元素。
    • :其值为 2

指针算术运算原理: 当对指针进行算术运算(如 ptr + n)时,指针移动的字节数取决于它所指向的数据类型的大小。对于 int 类型指针,ptr + 1 会使指针移动 sizeof(int) 个字节,从而指向下一个 int 类型元素的位置。在数组的情况下,数组名在表达式中会被隐式转换为指向首元素的指针,所以 arr 可以像指针一样使用,arr[1] 本质上等价于 *(arr + 1),这是因为数组下标访问是基于指针算术运算实现的。