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