面试题答案
一键面试- 内存分配方式区别
- 指针:指针本身是一个变量,存储的是另一个变量的地址。它在声明时会在栈上分配内存空间(如果是局部指针变量),用于存放所指向变量的地址。例如:
int num = 10;
int* ptr = #
这里ptr
是指针变量,它在栈上有自己的内存空间,存放的是num
的地址。指针可以被重新赋值指向不同的变量,因为它只是保存地址,通过改变保存的地址值就能改变指向。
- 引用:引用是已存在变量的别名,它在声明时必须初始化,并且一旦初始化后就不能再引用其他变量。引用本身不占据额外的内存空间来存储地址,它和被引用的变量共享同一块内存。例如:
int num = 10;
int& ref = num;
这里ref
是num
的引用,ref
不是一个独立的变量,没有额外的内存用于存储地址,它和num
在内存中代表同一块区域。
- 举例说明
#include <iostream>
int main() {
int num1 = 10;
int num2 = 20;
// 指针示例
int* ptr = &num1;
std::cout << "指针ptr指向的地址: " << ptr << ", 指向的值: " << *ptr << std::endl;
ptr = &num2;
std::cout << "指针ptr重新指向后地址: " << ptr << ", 指向的值: " << *ptr << std::endl;
// 引用示例
int& ref = num1;
std::cout << "引用ref的值: " << ref << std::endl;
// ref = num2; 这行代码是错误的,引用一旦初始化不能再改变引用对象
return 0;
}
在上述代码中,指针ptr
可以重新指向不同的变量,而引用ref
一旦绑定到num1
,就不能再绑定到其他变量,体现了它们在内存使用和特性上的差异。