MST

星途 面试题库

面试题:C++中指针运算的基本规则

在C++中,假设有一个整型数组`int arr[5] = {1, 2, 3, 4, 5};`,定义一个指针`int *ptr = arr;`。请描述`ptr + 2`和`*(ptr + 2)`分别代表什么含义,并说明指针运算的基本规则。
42.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. ptr + 2的含义
    • ptr是一个指向arr数组首元素的指针。ptr + 2表示指针ptr在内存中向前移动两个int类型数据的位置。由于int类型通常占4个字节(具体取决于系统和编译器),所以ptr + 2指向的地址是ptr当前指向地址加上2 * sizeof(int)的结果。它指向数组arr的第3个元素(数组下标从0开始,这里对应arr[2])的地址。
  2. *(ptr + 2)的含义
    • *(ptr + 2)是对ptr + 2所指向地址的解引用操作。即获取ptr + 2所指向内存位置的值,也就是数组arr中第3个元素(arr[2])的值,在这里为3。
  3. 指针运算的基本规则
    • 指针与整数相加/相减
      • 指针加上或减去一个整数n,结果是指针在内存中向前(加)或向后(减)移动n个其所指向数据类型大小的位置。例如,若ptr是一个int*类型指针,ptr + n表示ptr当前指向地址加上n * sizeof(int)
    • 指针相减
      • 两个指针相减的前提是它们指向同一块连续内存区域(如数组)。结果是两个指针之间相隔的元素个数。例如,若ptr1ptr2是指向同一数组的指针,ptr2 - ptr1表示从ptr1ptr2之间有多少个数组元素(假设ptr2指向的地址大于等于ptr1指向的地址)。
    • 指针比较
      • 可以使用关系运算符(如<, >, <=, >=, ==, !=)对指针进行比较。比较的是指针所指向的内存地址。例如,在同一数组中,指向数组前面元素的指针地址小于指向后面元素的指针地址。