是否可以增加传递给函数的数组?
我有一个单维数组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
}
如何实现此目的?如果数组作为指针传递,则只反映对存储在数组中的值的修改。如果我们必须在函数中递增数组,那么该函数的原型是什么?
答案 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因为没有更多指针将引用此内存块的头部。哈哈