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 * 4
或 p += 4 * sizeof(int)
), 因为 C 中的指针运算被定义为总是对所指向的对象进行操作。 (也就是说,编译器会自动处理与指向对象大小的乘法运算)。
数组不是指针,所以v
不是指针——它是一个数组,由元素组成。您不能更改 C 中 任何 对象在内存中的位置。
当您只写 v
时,它 评估 指向第一个元素的指针。所以,解决方法很简单,赋值给一个actual指针你可以修改:
int *p = v;
p += 3;
所以我有以下 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 * 4
或 p += 4 * sizeof(int)
), 因为 C 中的指针运算被定义为总是对所指向的对象进行操作。 (也就是说,编译器会自动处理与指向对象大小的乘法运算)。
数组不是指针,所以v
不是指针——它是一个数组,由元素组成。您不能更改 C 中 任何 对象在内存中的位置。
当您只写 v
时,它 评估 指向第一个元素的指针。所以,解决方法很简单,赋值给一个actual指针你可以修改:
int *p = v;
p += 3;