0

是否可以增加传递给函数的数组?

我有一个一维数组 a[4] = {10,20,30,40},我想调用一个函数并递增数组以指向第三个元素并从 main() 打印它。

例如:

int main()
{
  int a[4] = {10,20,30,40};
  cout << *a; // 10
  increment(); // function call
  cout << *a; // 40
}

我们怎样才能做到这一点?如果数组作为指针传递,则只有对存储在数组中的值的修改会得到反映。如果我们必须在函数中递增数组,函数的原型是什么?

4

4 回答 4

2

替代建议是:

#include <iostream>

void foo(int *&p) // <-- take pointer by reference...
{
  ++p;
  ++p;
}

int main(void)
{
  int a[] = {1,2,3,4};

  int*p = a;

  std::cout << *p << std::endl;

  foo(p);

  std::cout << *p << std::endl;

}

使用第二个指针访问原始数组并在函数中修改它...

进一步的替代方法是使用其中之一std::vector<int>std::array<int, 4>然后将迭代器传递给函数(并让它返回一个迭代器)......

于 2012-12-03T10:57:16.823 回答
0

不适用于您当前的语法。但是,您可以从 中返回新指针increment(),并将其存储在另一个变量中。

int main()
{
  int a[4] = {10,20,30,40};
  cout << *a;
  int* new_a = increment(a)
  cout << *new_a;
}
于 2012-12-03T10:54:51.583 回答
0

您可以通过这种方式在指针位置访问:

int main() {
  int a[4] = {10,20,30,40};
  cout << *a;        print ---> 10 
  cout << *(a + 3);  print ---> 40
}

你不能做你想做的事而不丢失信息

于 2012-12-03T10:58:56.873 回答
0

程序中的指针 a 在编译时(或链接时间取决于您的想法)指向程序的数据空间。

如果你有类似的东西

void function(int* &x) {
  x+=2;
}

int main() {
  int *a = new int(4);
  int *b = a;
  a[0] = 10; a[1] = 20; a[2] = 30; a[3] = 40;
  cout << *a;
  function(b);
  cout << *b;
  delete a;
}

GNU G++ 将检查并且不允许您移动指针变量 a,因为没有更多指针将引用此内存块的头部。哈哈

于 2012-12-03T11:05:40.583 回答