如果我有一个int
s的数组,我怎么能直接编辑每个int
?修改整数数组中的整数
int i = arr + 1; // Getting the integer in pos 1
i
只是一个副本,是否正确?如果我设置了i = 4
,那么arr + 1
仍然是1
。
会这样吗?
int *i = &(arr + 1);
*i = 4;
如果我有一个int
s的数组,我怎么能直接编辑每个int
?修改整数数组中的整数
int i = arr + 1; // Getting the integer in pos 1
i
只是一个副本,是否正确?如果我设置了i = 4
,那么arr + 1
仍然是1
。
会这样吗?
int *i = &(arr + 1);
*i = 4;
你应该使用数组运算符:
int i = arr[1];
arr[1] = 4;
数组索引运营商可以做你的需要。
arr[3] = 101; //assignment to array
int x = arr[37]; //get value from array
等
无需对这里的内存算术..
你已经有了:
int arr[4] = {0, 1, 2, 3};
要进一步编辑呢?
arr[0] = 42;
// arr[] = {42, 1, 2, 3};
要一次更改所有的人?有:
for(int i = 0; i < 4; ++i)
arr[i] = i * 2;
// arr[] = {0, 2, 4, 6};
而且不要忘记memset()
!
memset(arr, 42, 4);
// arr[] = {42, 42, 42, 42};
想要的一切,但第一个元素更改为7
?
memset(&arr[1], 7, 4 - 1);
// arr[] = {42, 7, 7, 7};
你想知道事端约pointers? (Here's a more useful link.)
看到这个? (如果你不能,请停止阅读此内容,谢谢!)
int *ptr = &arr[1];
它等同于:
int *ptr = arr + 1;
这也等同于:
int *ptr = arr;
ptr = ptr + 1;
好了,现在我们已经得到了下来,让我们告诉你一个比我上面做的更有效的循环:
int *ptr = arr;
for(int i = 0; i < 4; ++i)
{
*ptr = i << 2;
// i * 2 == i << 2
++ptr;
}
// arr[] = {0, 2, 4, 6};
不是你应该这样编码;编译器很可能会为您处理它。
你想以一系列问题的形式回答另一个问题吗?
你的代码改成这样:
int *i = arr + 1;
*i = 4;
,它会工作。 C中的数组只是指向数组中第一个元素的指针。 所以这个arr + 0
将给出阵列中第一个元素的地址,这个arr + 1
是第二个元素的地址。
我想你的意思是说'地址算术'而不是'记忆算术' – blubb 2011-05-01 20:17:18
是的,这是更好的方式说出来。或者可能是指针算术 – 2011-05-01 20:18:08