面试题答案
一键面试ptr
- 关系:
ptr
是一个指向数组arr
首元素的指针。 - 值:它的值是数组
arr
首元素(即arr[0]
)的内存地址。假设数组arr
首地址为0x100
(实际地址由编译器和运行环境决定),那么ptr
的值就是0x100
。
- 关系:
ptr + 1
- 关系:
ptr + 1
是指针ptr
进行算术运算后的结果。它指向数组arr
中第二个元素的位置。 - 值:由于
ptr
指向int
类型的数组,int
类型在一般情况下占 4 个字节(具体取决于编译器和系统)。如果ptr
的值为0x100
,那么ptr + 1
的值就是0x100 + 4 = 0x104
,即指向数组arr
中第二个元素arr[1]
的内存地址。
- 关系:
*(ptr + 1)
- 关系:
*(ptr + 1)
是对ptr + 1
所指向的内存地址进行解引用操作,得到该地址存储的值。 - 值:因为
ptr + 1
指向arr[1]
,所以*(ptr + 1)
的值就是arr[1]
的值,即2
。
- 关系:
arr[1]
- 关系:
arr[1]
是数组arr
的第二个元素。 - 值:其值为
2
。
- 关系:
指针算术运算原理:
当对指针进行算术运算(如 ptr + n
)时,指针移动的字节数取决于它所指向的数据类型的大小。对于 int
类型指针,ptr + 1
会使指针移动 sizeof(int)
个字节,从而指向下一个 int
类型元素的位置。在数组的情况下,数组名在表达式中会被隐式转换为指向首元素的指针,所以 arr
可以像指针一样使用,arr[1]
本质上等价于 *(arr + 1)
,这是因为数组下标访问是基于指针算术运算实现的。