C 语言指针 vs. 数组

2024 年 8 月 28 日 | 3 分钟阅读

通常,在大多数情况下,用户认为指针和数组是同一回事。然而,事情并非那么简单,因为如果我们深入研究两者,会发现一些明显的差异。因此,在本文中,我们将探讨指针和数组是否真的相同。

数组的定义

数组通常用于存储性质相同的同类型数据项或值。虽然数组不能用于存储性质不同的数据项或值,但这也被认为是数组的一个显著缺点。

语法

指针的定义

与数组不同,如果我们讨论指针,它们通常用于存储其他变量的内存地址,而不是存储变量的实际值。但是,我们也可以使用指针算术来访问整个数组。此外,它甚至可以使访问数组的过程更快。

语法

指针变量可以如下所示声明

指针和数组之间的主要区别是什么?

除了我们上面讨论的内容外,在实现指针和数组时可以发现关键区别。例如,当实现数组时,会分配固定大小的内存块。另一方面,当实现指针时,内存是动态分配的。因此,在指针和数组中分配内存的方式可以被认为是关键区别。然而,这并非数组和指针之间唯一的区别,因为还存在其他一些区别,如下所示:

  1. 数组通常存储相似数据类型的变量,并且变量的数据类型必须与数组的类型匹配。然而,指针变量存储的是一个变量的地址,该变量的类型与指针变量的类型相似。
  2. 我们可以创建一个指针数组,即其变量为指针变量的数组。另一方面,我们也可以创建一个指向数组的指针。
  3. 通常,数组是静态的,这意味着一旦数组的大小被声明,就不能根据用户的需求进行调整。而另一方面,指针是动态的,这意味着分配的内存可以在稍后的任何时间点进行调整。
  4. 数组在编译时分配,而指针在运行时分配。
  5. 如果我们讨论数组的大小,它通常取决于存储在其中的变量数量。而在指针变量的情况下,它只存储变量的地址。为了更清楚地理解这一点,您可以考虑以下给出的示例。
  6. "sizeof" 运算符

如果我们使用 "sizeof(array)",它将返回数组中所有元素使用的内存总量。然而,如果我们将其用于指针,例如 "sizeof(pointer)",它只返回指针变量本身使用的内存量。

比较图表

让我们看一个快速比较图表,以便更轻松地理解数组和指针之间的区别。

比较基础指针Array
声明// 在 C++ 中
type * var_name;
// 在 C++ 中
type var_name[size];
// 在 Java 中
type var-name[ ];
var_name = new type[size];
工作方式它通常存储与指针变量数据类型相同的另一个变量的地址。数组通常存储相同数据类型变量的值。
生成可以生成一个指向数组的指针。可以生成一个指针数组。
存储指针专门设计用于存储变量的地址。普通数组存储变量的值,而指针数组存储变量的地址。
容量通常,数组可以存储的元素数量与数组变量的大小相同。一个指针变量一次只能存储一个变量的地址。

结论

在本文中,我们解释了数组和指针之间的关键区别。因此,阅读本文后,我们希望您对指针和数组的困惑将永远消除。