1
int main ()
{
  int numbers[5];
  int * p;
  p = numbers;  *p = 10;
  p++;  *p = 20;
........

好的,这是来自他们网站的 c++ 手册中的指针部分。我迷路了。

如果p是对数组的引用,它在第 4 行增加了什么?或者它甚至指向数组numbers

什么时候比仅仅重新分配数组中的值更好?

4

4 回答 4

6

p不是对数组的引用,而是指向整数的指针。当一个指针增加时,它的值增加了所指向类型的大小,在这种情况下是4.

在赋值p = numbers;中,numbers(数组的名称)衰减为指向其第一个元素(即&numbers[0])的指针,然后将其赋值给p。然后,在你做之后p++p指向 - 的下一个元素,numbersp等于&numbers[1]

在您展示的情况下,没有理由直接使用数组访问来执行此操作。您可能需要这样做以与某些功能或 API 进行交互,或者出于某些其他程序设计原因,这就是可能的原因。

于 2013-06-10T19:40:14.690 回答
2

p 指向 numbers 数组中的第一个变量,所以

*p = 10

设置数字[0] = 10。

然后他增加 p (p++) 指向的地址,所以现在 p 指向数字 [1]。然后用 20 填充 numbers[1]。仅此而已

于 2013-06-10T19:41:45.407 回答
1

这是我的想法,如果我错了,请纠正我。

int *p;决定 p 应该是什么 - 一个整数指针,即一个存储内存地址位置的变量(如果你尊重,它只需要一个整数值)

p = numbers;不决定前一行中已经声明的 p 应该是什么。

它只是用 numbers 的“右值”分配变量 p(即为 p 分配的内存)。即数字计算值,它实际上是数字数组中第一项的内存地址。

p并且number没有任何共同之处,只是它们具有相同的值——即内存地址。 p并且number被 c++ 区别对待,因为p指向一个整数,number指向一个数组。如果你做一个 sizeof 你会得到整数和数组的 sizeof 作为 return 。

于 2013-06-10T19:50:03.780 回答
0

在 C++ 中,数组是一种指针,它指向数组中的第一个值。语法numbers[2]的含义与*(numbers+2). 当您将指针复制numbersp时,您p还指向数组的第一个值numbers[0]. 增加它p++使其指向数组的第二个值,numbers[1]

当你执行命令*p = 10;*p = 20;时,你将指向的值设置为p等于 10 和 20;这些分别是numbers[0]numbers[1]

于 2013-06-10T19:46:17.517 回答