递增数组指针

时间:2012-12-03 10:52:22

标签: c++

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

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

例如:

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

如何实现此目的?如果数组作为指针传递,则只反映对存储在数组中的值的修改。如果我们必须在函数中递增数组,那么该函数的原型是什么?

4 个答案:

答案 0 :(得分: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>,然后将迭代器传递给函数(并使其返回迭代器)...

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

您可以通过以下方式访问指针位置:

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

在不丢失信息的情况下,你不能做你想做的事

答案 3 :(得分: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因为没有更多指针将引用此内存块的头部。哈哈