首页 > 解决方案 > 在 C 中将数组作为参数传递时出现意外结果?

问题描述

我正在尝试习惯使用指针,但是在将它们作为参数传递给函数时我有点挣扎。我读到数组是通过引用函数传递的,因此这样的代码可以更改数组元素(假设给出了一个有效的数组):

void f(int *b)
{
  b[2]=1;
}

in main:
f(validArray);

然而,即使我们传递了指针,这似乎也不起作用;

void foo(int *b)
{
  b=b+2;
}

in main:
f(validArray);

不会进一步移动指针。这是为什么?

标签: carraysfunctionpointersreference

解决方案


b[2]=1;

本质上是

*(b+2) = 1;

这意味着它改变了地址中的数据(b+2)


b=b+2;

这意味着您要b指向2b 之前指向的元素旁边的元素,这不会影响指针地址中的数据b,因此不会更改数组中的数据validArray


推荐阅读