C或c++语言中的数组实际上是指针吗?

Are arrays in C or C++ language actually Pointers

本文关键字:实际上 指针 数组 c++ 语言      更新时间:2023-10-16

C语言中的数组实际上是指针吗?为什么不呢?在c++中?

指针可以在普通C/c++(编程)中用于解引用任何数量的值吗?它所指向的内存没有任何限制吗?假设我声明char *ptr。然后我可以解引用单个字符。还有1000个字符的字符串?有多少个字符串?(为什么没有限制)?

与C和c++编程相同吗?如果没有,为什么不呢?

C语言中的数组不是指针。数组是(可能很大的)连续的内存块——由许多较小的对象组成的对象,称为数组元素。

至于"为什么不"……数组在B和BCPL语言(C的前身和祖先)中曾经是指针。它们是C的第一个粗略版本——"胚胎"C中的指针。然而,C语言想要引入聚合struct类型的概念。如果数组在C中被实现为指针,那么包含数组的struct对象将需要非平凡的初始化("构造"),并且将变得不可复制(即使是memcpy)。这被认为是不可接受的。这就是导致在C中重新设计数组思想的原因。你可以在Dennis Ritchie的C语言的发展页面(参见"胚胎C"部分)上读到它。

至于你可以通过指针访问多少内存…阅读指针运算。

c++中的原始数组实际上与C中的相同。

指针所指向的内存量仅受计算机内存量的限制。它只指向特定项开始的位置;它没有说接下来会有多少。实际上,它确实携带了一些关于它所指向的第一个对象的大小的信息,但没有关于后面有多少个对象的信息。

如果你用食指指着一所房子,房子会变成你的手指吗?

你可以用食指指的东西是否有一个限制?

(是的,这个类比只能到此为止,但你有其他合适的答案。)

数组不是指针。


  • int arr[10]:

    • 使用的内存量是sizeof(int)*10字节

    • arr&arr的值必须相同

    • arr指向一个有效的内存地址,但不能设置为指向另一个内存地址


  • int* ptr = new int[10]:

    • 使用的内存量是sizeof(int*) + sizeof(int)*10字节

    • ptr&ptr的值不一定相同(事实上,它们大多不同)

    • ptr可以设置为指向任何东西(有效和无效的内存地址),只要你愿意