int main ()
{
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
........
好,所以这是来自他们网站的c ++手册中的指针部分。我迷路了。
如果p
是对数组的引用,那么第4行的增量是多少?或者甚至指向数组numbers
?
什么时候比重新分配数组中的值更好?
答案 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'分配。即数字计算值,它实际上是数字数组中第一项的内存地址。
p
和number
没有任何共同之处,但它们具有相同的值 - 这是一个内存地址。
c ++对p
和number
的处理方式不同,因为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]
。