【问题标题】:Indexing of pointer when accessing elements of an array访问数组元素时的指针索引
【发布时间】:2019-09-02 08:51:00
【问题描述】:

我是初学者,我正在尝试了解多维数组的工作原理。

到目前为止,我已经来了这个我不明白的代码sn-p:

int arr[] = { 3, 5, 6, 7, 9 };
int (*ptr)[5] = &arr;

好的。 我知道 ptr 是一个指向 5 个元素的数组的指针。

但是'&'在做什么呢? ptr 是否指向 'arr' 的起始地址?但是'arr'不是已经是一个地址了吗?那为什么会有'&'呢? 还。索引5的意义是什么?因为当我尝试给出除 5 之外的任何其他数字时,它会引发错误。

如果这一切听起来很愚蠢,我很抱歉,但我很困惑!救命!

【问题讨论】:

  • 我没听明白?
  • 这里你没有index,但是你声明了一个指向一个有5个元素的数组的指针。

标签: c arrays pointers


【解决方案1】:

在这里,您有一个变量arr,类型为array of 5 int

int arr[] = { 3, 5, 6, 7, 9 };

在这里,您声明了一个指向 array of 5 int 的指针 ptr

int (*ptr)[5]

这将获得arr 的地址,类型为pointer to array of 5 int

&arr

并且这个赋值有效,因为指针类型是相等的:

int (*ptr)[5] = &arr;

现在如果你将ptr的类型更改为另一种类型,即pointer to array of 6 int

int (*ptr)[6];

然后分配不再有效,因为指针类型现在不匹配。这就是您收到错误的原因。

注意:此代码中的[5]索引任何内容,而只是变量声明的一部分(数组中的元素数量)

【讨论】:

  • 好吧,对于int a[3];,a 的地址是指向 3 个元素数组的指针吗? (或者只有在初始化时为元素赋值时才有效?)
  • @bobthebuilder 是的,&a 的类型是 int (*)[3]。
  • 好吧有道理。谢谢!
【解决方案2】:

你的数组只有一维,所以它不是多维的。

您的数组有 5 个元素,由于数组是从零开始的,因此访问元素 [5](第六个元素)实际上会导致未定义的行为。

arr 不是地址,而是数组。 & 是地址运算符。

【讨论】:

  • 事情就是这样。代码的第二行。是不是有点相当于*p=a;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2019-07-28
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多