C中的数组赋值使用指针算法

当我使用指针算法访问特定元素时,如何更改数组中的值?

#include  int main() { int a[3] = {1, 1, 1}, b[3] = {2, 2, 2}; a++ = b++; // How can I get this to work so a[1] = b[1]? return 0; } 

数组不是指针。 重复三次; 数组不是指针

你不能增加一个数组,它不是一个可赋值(即你不能改变它)。 你当然可以索引它以获得一个值:

 a[1] = b[1]; 

其次,当您打算分配给数组的元素时,您当前的代码正在尝试递增,然后为数组本身分配一个新值。 在需要时,数组会降级为指针,所以这也适用:

 int *a_ptr = a; int *b_ptr = b; *++a_ptr = *++b_ptr; // or, better... a_ptr[1] = b_ptr[1]; 

这是你打算做的。 我更喜欢版本1,并且通常使用带指针的索引,因为它通常更容易阅读。

我怎样才能让它工作,所以[1] = b [1]?

简单:

 a[1]++; 

如果你只是想将a[1] (1)增加为b[1]碰巧是(2),或者

 a[1] = b[1]; 

如果你想让a[1]b[1]具有相同的值,无论该值是什么。

当我使用指针算法访问特定元素?

在您的示例中,您不访问任何元素,也不进行指针运算,因为ab是数组,而不是指针。 你的问题的表述很难解释,因为这个和因为

 a++ = b++; 

1)完全没有意义2)即使ab 指针也不是合法的C,因为左边必须是左值,但是a++不是3)与你希望a[1]成为的左边没有明显的关系与b[1]相同。 可能你想要的是:

 int* ap = a; // get pointer to first element of a int* bp = b; // get pointer to first element of b // point ap to second element of a and // point bp to second element of b and // copy the value at *bp to *ap *++ap = *++bp; 

那确实会设置a[1]b[1]

在这种情况下,您的数组实际上不是指针。 当它们作为指针访问时,它们由编译器转换,但我不相信你被允许做类似a++事情。

如果你想用算术做这个,你需要实际的指针:

 int *ap = a, *bp = b; *ap++ = *bp++; 

这就像做a[0] = b[0]; 然后将每个指针移动到其关联数组中的下一个元素。

但你的问题是你要设置a[1] = b[1] 。 好吧,你可以这样做:

 *++ap = *++bp; 

或者你可以使用数组索引,让你更清楚你正在做什么。