面试题:数组和指针的区别?
对于C++中数组和指针的区别,我的理解如下:
数组和指针的定义
- 数组:是一种数据类型,用来存储相同类型的若干元素。数组声明时需要指定数组的大小,这个大小必须是一个常量表达式。
int arr[5]; // 声明一个包含5个int类型元素的数组
- 指针:也是一种数据类型,它可以存储另一个变量的内存地址。指针没有固定大小,不过在声明时需要指定指针所指向的数据类型。
int *p; // 声明一个int类型指针
数组和指针的使用
- 数组可以直接使用下标访问其中的元素:
int arr[3] = {1, 2, 3}; std::cout << arr[0] << std::endl; // 输出数组第一个元素的值,即1
- 指针需要先将其指向另一个变量的地址,然后才可以使用*运算符访问该地址中的值:
int n = 10; int *p = &n; std::cout << *p << std::endl; // 输出指针p所指向的变量n的值,即10
- 对指针进行运算可以改变其指向的地址,例如:
int arr[3] = {1, 2, 3}; int *p = arr; std::cout << *(++p) << std::endl; // 输出arr[1]的值,即2
数组和指针的相似之处
- 数组名也可以被解释为一个指向数组第一个元素的指针:
int arr[3] = {1, 2, 3}; int *p = arr; // 等价于int *p = &arr[0];
- 对指针进行下标运算也可以访问其所指向的数据:
int arr[3] = {1, 2, 3}; int *p = arr; std::cout << p[1] << std::endl; // 输出arr[1]的值,即2
综上,数组和指针的区别在于它们的定义和使用方式不同。数组是一种数据类型,用于存储相同类型的若干元素,并通过下标来访问其中的元素;而指针则是一个变量,存储另一个变量的内存地址,并通过*运算符和指针运算来访问该地址中的数据。虽然数组名和指针都可以被解释为指向内存中的某个位置,但它们在赋值、更改指向位置等方面有很大差异。