所以我有以下8个元素的int数组:
int v[8] = {0, 1, 2, 3, 4, 5, 6, 7};
我将这个数组传递给一个函数作为循环
中的参数while(i < N) {
.
.
function(v);
.
.
}
在这个函数中,我使用前4个元素,在下一个循环中,我想增加数组地址4个位置,这样我就可以处理最后4个元素。因为int是4个字节,所以我想的是:
while(i < N) {
.
.
function(v);
.
*v += 16;
}
然而,这并不是我所期待的。
注意: 因为我正在使用嵌入式系统,所以我无法使用malloc。我的数组必须以我相信的方式声明。
问题(编辑):
如何增加数组的地址,以便第二次迭代v指向v [4]?
答案 0 :(得分:7)
在这种情况下,您想要使用的是指向数组的指针。
如果你这样做
int *p = v;
然后在你的循环调用中
function(p);
然后再做
p += 4;
然后在下一次通过循环调用的过程中
function(p);
再次,它会做你想要的。
与任何变量一样,一旦数组分配了地址,就无法移动它。所以没有办法“增加数组的地址”。但是通过创建第二个指针变量,可以很容易地在数组中移动它。 (但是如果你想这样想,是的,你正在增加指针中的地址。)
你不必担心大整数是多少(也就是说, not 不得不说p += 4 * 4
或p += 4 * sizeof(int)
之类的东西),因为指针运算在C中定义为始终对指向的对象进行操作。 (也就是说,编译器会自动处理指向对象大小的乘法。)
答案 1 :(得分:3)
数组不是指针,因此v
不是指针 - 它是一个由元素组成的数组。您无法更改C中任何对象的内存位置。
当您只写v
时,评估指向第一个元素的指针。因此,解决方案很简单,将其分配给您可以修改的实际指针:
int *p = v;
p += 3;