-1

所以,我刚刚了解了数组、指针和衰减,但我不太明白。

如果“数组”(用 声明的东西int arr[])在传递给函数时只衰减为指针,为什么在 main 中评估时数组等于指向其第一个元素的指针?此外,如果 main 中的“数组”不是指针,而是arr[x]的语法糖,那么如果“数组”不是指针*(arr + x),为什么需要取消引用。令我更加困惑的是 main 中的 sizeof(arr) 返回正确的值,而在函数中它返回指针的大小。此外,我正在学习的 CS 课程指出,“数组”的名称实际上是指向其第一个元素的指针,但同样,这不是我从其他来源听到的。

此外,如果“数组”实际上是指针,有没有办法直接创建一个数组,跳过中间指针(如果你甚至想做这样的事情)。

任何人都可以帮我解决这一切吗?

4

1 回答 1

-1

首先,数组的名称被认为是一个指针。@Sowmya 关于火车和车厢的所有事情都是正确的,数组的名称是第一件事,然后系统代表数组的名称计算所有其他元素,即第一个元素的地址。当声明一个数组时

int arr[10];

那么 arr 是一种指针。它指向 10 个数字的数组,另一件事是它是一个地址,所以你也可以做 *(a+11) 访问 11 的元素,在我们的例子中不会给出编译时间错误,但可能会给出运行时错误作为分段错误或可能给出垃圾值。所以我得出的结论是数组的名称是一个指针。现在腐烂的东西-当您执行 sizeof(arr) 时,它会为您提供数组的大小(如果 int 为 4 字节),则 sizeof 将给出 40。但是当您将数组传递给函数时,它会衰减为指针不再是一个数组,但正如我们所知,我们可以通过简单地取消引用来访问元素。所以它仍然有效,但 sizeof 会将 arr 理解为指针并给出指针的大小(假设系统大小的指针是8 字节),即 8 字节。

于 2020-01-26T07:58:04.517 回答