MST

星途 面试题库

面试题:C语言指针算术运算基础

假设有一个整型数组 int arr[5] = {1, 2, 3, 4, 5}; 定义一个指针 int *ptr = arr; 请描述执行 ptr += 2; 后,ptr 指向哪里,并计算此时 *ptr 的值是多少。同时说明指针算术运算在这种情况下的原理。
27.0万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. ptr 指向的位置: 初始时 ptr 指向数组 arr 的首元素 arr[0]。当执行 ptr += 2; 后,由于 ptrint 类型的指针,在 C/C++ 中,指针算术运算是以其所指向的数据类型的大小为单位进行的。int 类型通常在 32 位和 64 位系统中占 4 个字节(不同系统可能有差异,但一般情况如此)。所以 ptr += 2; 意味着 ptr 向前移动了 2 * sizeof(int) 个字节,即从指向 arr[0] 移动到了指向 arr[2]

  2. *ptr 的值: 此时 *ptr 的值为 arr[2] 的值,因为 arr[2] 的值为 3,所以 *ptr 的值是 3

  3. 指针算术运算原理: 指针算术运算遵循以下规则:

    • 当指针加上一个整数 n 时,指针实际移动的字节数是 n * sizeof(指针所指向的数据类型)。在本题中,ptr += 2; 就是 ptr 移动了 2 * sizeof(int) 个字节。
    • 当指针减去一个整数 n 时,指针实际移动的字节数是 -n * sizeof(指针所指向的数据类型),即向内存地址减小的方向移动。
    • 两个指针相减时(前提是它们指向同一数组中的元素),结果是它们之间元素的个数(以指针所指向的数据类型为单位),例如 &arr[5] - &arr[2] 的结果是 3,表示从 arr[2]arr[5] 之间有 3 个 int 类型的元素。