C增加int数组地址?

C increase int array 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]?

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

如果你这样做

int *p = v;

然后在你的循环中调用

function(p);

然后

p += 4;

然后在下一次循环调用中

function(p);

同样,它会做你想做的事。

与任何变量一样,数组一旦分配了地址,就无法移动它。所以没办法"increase the address of the array"。但是通过创建第二个指针变量,可以很容易地在数组中移动它。 (但如果你喜欢那样想,是的,你正在增加指针中保存的地址。)

您不必担心整数有多大(也就是说,您 不必 必须说 p += 4 * 4p += 4 * sizeof(int) ), 因为 C 中的指针运算被定义为总是对所指向的对象进行操作。 (也就是说,编译器会自动处理与指向对象大小的乘法运算)。

数组不是指针,所以v不是指针——它是一个数组,由元素组成。您不能更改 C 中 任何 对象在内存中的位置。

当您只写 v 时,它 评估 指向第一个元素的指针。所以,解决方法很简单,赋值给一个actual指针你可以修改:

int *p = v;
p += 3;