修改整数数组中的整数

时间:2011-05-01 20:11:00

标签: c

如果我有一个int的数组,我怎么能直接编辑每个int

int i = arr + 1; // Getting the integer in pos 1

i只是一个副本,对吗?如果我设置i = 4,那么arr + 1仍然是1

这会有用吗?

int *i = &(arr + 1);
*i = 4;

4 个答案:

答案 0 :(得分:3)

您应该使用数组运算符:

int i = arr[1];
arr[1] = 4;

答案 1 :(得分:1)

你有:

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;

好的,既然我们已经解决了这个问题,让我们向你展示一个比我上面做的更有效的for循环:

int *ptr = arr;
for(int i = 0; i < 4; ++i)
{
    *ptr = i << 2;
    // i * 2 == i << 2

    ++ptr;
}

// arr[] = {0, 2, 4, 6};

不是说你应该这样编码;编译器最有可能为你处理它。


您想以一系列问题的形式提出另一个答案吗?

答案 2 :(得分:1)

将您的代码更改为:

int *i = arr + 1;
*i = 4;

它会起作用。 C中的数组只是指向数组中第一个元素的指针。 所以这个arr + 0将给出数组中第一个元素的地址,这个arr + 1是第二个元素的地址。

答案 3 :(得分:0)

数组索引运算符可以满足您的需求。

arr[3] = 101; //assignment to array
int x = arr[37]; //get value from array

这里不需要记忆算法..