面试题答案
一键面试-
ptr 指向的位置: 初始时
ptr
指向数组arr
的首元素arr[0]
。当执行ptr += 2;
后,由于ptr
是int
类型的指针,在 C/C++ 中,指针算术运算是以其所指向的数据类型的大小为单位进行的。int
类型通常在 32 位和 64 位系统中占 4 个字节(不同系统可能有差异,但一般情况如此)。所以ptr += 2;
意味着ptr
向前移动了2 * sizeof(int)
个字节,即从指向arr[0]
移动到了指向arr[2]
。 -
*ptr 的值: 此时
*ptr
的值为arr[2]
的值,因为arr[2]
的值为3
,所以*ptr
的值是3
。 -
指针算术运算原理: 指针算术运算遵循以下规则:
- 当指针加上一个整数
n
时,指针实际移动的字节数是n * sizeof(指针所指向的数据类型)
。在本题中,ptr += 2;
就是ptr
移动了2 * sizeof(int)
个字节。 - 当指针减去一个整数
n
时,指针实际移动的字节数是-n * sizeof(指针所指向的数据类型)
,即向内存地址减小的方向移动。 - 两个指针相减时(前提是它们指向同一数组中的元素),结果是它们之间元素的个数(以指针所指向的数据类型为单位),例如
&arr[5] - &arr[2]
的结果是3
,表示从arr[2]
到arr[5]
之间有 3 个int
类型的元素。
- 当指针加上一个整数