C增加int数组地址?

时间:2018-05-04 15:51:32

标签: c arrays memory-address

所以我有以下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]?

2 个答案:

答案 0 :(得分:7)

在这种情况下,您想要使用的是指向数组的指针。

如果你这样做

int *p = v;

然后在你的循环调用中

function(p);

然后再做

p += 4;

然后在下一次通过循环调用的过程中

function(p);

再次,它会做你想要的。

与任何变量一样,一旦数组分配了地址,就无法移动它。所以没有办法“增加数组的地址”。但是通过创建第二个指针变量,可以很容易地在数组中移动它。 (但是如果你想这样想,是的,你正在增加指针中的地址。)

你不必担心大整数是多少(也就是说, not 不得不说p += 4 * 4p += 4 * sizeof(int)之类的东西),因为指针运算在C中定义为始终对指向的对象进行操作。 (也就是说,编译器会自动处理指向对象大小的乘法。)

答案 1 :(得分:3)

数组不是指针,因此v不是指针 - 它是一个由元素组成的数组。您无法更改C中任何对象的内存位置。

当您只写v时,评估指向第一个元素的指针。因此,解决方案很简单,将其分配给您可以修改的实际指针:

int *p = v;
p += 3;