C++笔试:简述数组与指针的区别

发布时间:2024年01月03日

在C++中,数组和指针都是常用的数据类型,它们有一些相似之处,但也有很明显的区别:

1、定义方式
定义数组时需要指定数组的大小,如下所示:

int arr[5]; // 定义一个大小为5的整型数组

而定义指针时只需要指定指针变量的类型,如下所示:

int *p; // 定义一个整型指针

2、取地址
对于数组,可以使用数组名来获取数组的首地址,如下所示:

int arr[5];
int *p = &arr[0]; // 获取数组arr的首地址

对于指针变量,可以使用取地址符&来获取指针变量的地址,如下所示:

int a = 10;
int *p = &a; // 获取变量a的地址,赋值给指针变量p

3、使用方式
数组和指针的使用方式也有所不同。
对于数组,可以通过数组名加索引的方式来访问数组元素,如下所示:

int arr[5] = {1, 2, 3, 4, 5};
int x = arr[2]; // 访问数组arr的第3个元素,即3

对于指针变量,可以通过解引用符*来访问指针指向的值,如下所示:

int a = 10;
int *p = &a; // 获取变量a的地址,赋值给指针变量p
int x = *p; // 访问指针变量p指向的值,即10

需要注意的是,指针变量也可以通过加减运算来访问数组元素,如下所示:

int arr[5] = {1, 2, 3, 4, 5};
int *p = &arr[0]; // 获取数组arr的首地址,赋值给指针变量p
int x = *(p + 2); // 访问数组arr的第3个元素,即3

4、内存分配方式
数组在定义时就已经确定了数组的大小,因此数组的内存空间是在编译时分配的,数组的大小不能动态改变。
而指针变量是可以动态分配内存空间的,可以使用new关键字来在堆上动态分配内存,如下所示:

int *p = new int; // 在堆上动态分配一个整型变量,返回其地址给指针变量p
delete p; // 释放p指向的动态内存空间

此外,还可以使用new关键字来在堆上动态分配一个数组,如下所示:

int *arr = new int[5]; // 在堆上动态分配一个大小为5的整型数组,返回其首地址给指针变量arr
delete[] arr; // 释放arr指向的动态内存空间

以上就是数组和指针的区别,需要根据具体的应用场景选择使用哪种数据类型。

文章来源:https://blog.csdn.net/qq_35320456/article/details/135347600
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。