dek*_*eko 0 c arrays memory-address
所以我有以下8个元素的int数组:
int v[8] = {0, 1, 2, 3, 4, 5, 6, 7};
Run Code Online (Sandbox Code Playgroud)
我将此数组作为循环中的参数传递给函数
while(i < N) {
.
.
function(v);
.
.
}
Run Code Online (Sandbox Code Playgroud)
在这个函数中我使用前4个元素,在下一个循环中我想增加数组地址4个位置,这样我就可以使用最后4个元素.因为int是4个字节,所以我想的是:
while(i < N) {
.
.
function(v);
.
*v += 16;
}
Run Code Online (Sandbox Code Playgroud)
但是,这并没有达到我的预期.
注意:因为我正在使用嵌入式系统,所以我无法使用malloc.我的阵列必须以我相信的方式宣布.
问题(编辑):
如何增加我的数组的地址,以便第二次迭代v指向v [4]?
在这种情况下,您要使用的是指向数组的指针.
如果你这样做
int *p = v;
Run Code Online (Sandbox Code Playgroud)
然后在你的循环调用中
function(p);
Run Code Online (Sandbox Code Playgroud)
然后呢
p += 4;
Run Code Online (Sandbox Code Playgroud)
然后在下一次通过你的循环调用
function(p);
Run Code Online (Sandbox Code Playgroud)
再次,它会做你想要的.
像任何变量一样,一旦数组分配了地址,就无法移动它.所以没有办法"增加数组的地址".但是通过创建第二个指针变量,可以很容易地在数组中移动它.(但是如果你想这样想,是的,你正在增加指针中的地址.)
你不必担心是(也就是,你有多大的整数不会有这样说话p += 4 * 4或p += 4 * sizeof(int)),因为在C指针运算定义为总是被指向的对象操作.(也就是说,编译器会自动处理指向对象大小的乘法).