面试题答案
一键面试#include <iostream>
int* doubleArray(int arr[], int size) {
int* ptr = arr;
for (int i = 0; i < size; ++i) {
*ptr *= 2;
++ptr;
}
return arr;
}
指针操作原理:
int* ptr = arr;
:这里将指针ptr
指向数组arr
的首地址。在C++中,数组名在很多情况下会隐式转换为指向数组首元素的指针,所以arr
和&arr[0]
是等价的,这里ptr
就获得了数组的起始地址。*ptr *= 2;
:*ptr
表示指针ptr
所指向的内存地址中的值,这里将该值翻倍。++ptr;
:使指针ptr
指向下一个元素的内存地址。由于ptr
是int*
类型,每次++ptr
,ptr
的地址值会增加一个int
类型的大小(通常在32位和64位系统中int
占4字节),从而指向下一个数组元素。- 循环结束后,数组所有元素都已翻倍,最后返回数组首地址
arr
,因为arr
在函数调用过程中始终指向数组起始位置,数组的修改也会体现在原数组上。