更改数组的基地址

ASF*_*ASF 1 c memory arrays pointers base-address

为什么不能修改数组的基地址?是否因为分配的内存丢失?在那种情况下,我可以使用指针创建一个数组并更改指针指向的内容,分配的内存也将丢失,那么有什么区别呢?

Sto*_*ica 5

数组是全部独立的对象,而不是指针。考虑一个更简单的对象:

int a = 0;
Run Code Online (Sandbox Code Playgroud)

您希望能够更改其地址吗?当然不是。对象是具有类型的存储区域。存储区域由其地址标识,因此您不会期望对其进行更改。数组也是对象。当你声明

int b[8] = {0};
Run Code Online (Sandbox Code Playgroud)

您声明一个对象,该对象的大小为8个整数,将占用一些存储空间。您只能更改其单​​个int的地址,而不能更改其地址。

您可能已经被告知数组是指针。但事实并非如此!它们可能甚至经常隐式地转换为指针,但是它们仍然是对象类型。指针通常代表数组,因为第一个元素的地址足以通过指针算术到达任何其他元素,但是指针不是数组对象本身。当检查它们的对象属性时,差异变得明显。例如:

sizeof(b) != sizeof(int*)
Run Code Online (Sandbox Code Playgroud)

对象b不是指针的大小,实际上是8个整数的大小,可能比指针大。