数组和指针没有意义

时间:2013-06-10 19:38:58

标签: c++ arrays

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

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

如果p是对数组的引用,那么第4行的增量是多少?或者甚至指向数组numbers

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

4 个答案:

答案 0 :(得分:6)

p不是对数组的引用,它是指向整数的指针。当指针递增时,其值会增加指向类型的大小,在本例中为4

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

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

答案 1 :(得分:2)

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

*p = 10

设置数字[0] = 10.

然后他递增p(p ++)指向的地址,所以现在p指向数字[1]。然后它用20填充数字[1]。这都是

答案 2 :(得分:1)

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

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

p = numbers;没有决定在早期行中已声明的p应该是什么。

它只是将变量p(即为p分配的存储器)与数字的'rvalue'分配。即数字计算值,它实际上是数字数组中第一项的内存地址。

pnumber没有任何共同之处,但它们具有相同的值 - 这是一个内存地址。 c ++对pnumber的处理方式不同,因为p指向一个整数,number指向一个数组。如果你做一个sizeof,你将获得整数和数组的sizeof作为返回。

答案 3 :(得分:0)

在C ++中,数组是一种指针,指向数组中的第一个值。语法numbers[2]*(numbers+2)的含义相同。将指针numbers复制到p时,您p也会指向数组的第一个值numbers[0]。使用p++递增它会使其指向数组的第二个值numbers[1]

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