在C ++中使用指针引用替换数组元素

时间:2014-06-18 06:01:19

标签: c++

我想通过引用将数组元素替换为其他值。但这样做时我遇到了问题。我的代码如下。在下面的代码中,我只通过引用传递了最后一个值10。但我希望得到像6,7,8,9,10这样的改变值。请建议:

#include <iostream>

using namespace std;

 int temp=6;
 int byreference (int *x){
   for (int t=0;t<5;t++){
     *x=temp+t;     
   }
}



int main ()
{   
    int array[5];

    for (int s=0;s<5;s++){
        array[s]=s+1;
        byreference(&array[s]);
        cout<<*&array[s]<<endl;
    }

}

3 个答案:

答案 0 :(得分:1)

如果您打算使用c++

,那么使用stl类型会好得多
#include <vector>
#include <iostream>
using namespace std;

const int temp=6;
int byreference (std::vector<int> &x){
    for (int t = 0; t<x.size(); t++){
        x[t] = temp + t;  
    }
}

int main ()
{   
    std::vector<int> array(5, 0);

    for (int s = 0; s < array.size(); s++) {
        array[s]=s+1;
        byreference(array);
        cout << array[s] << endl;
    }
}

输出:

6
7
8
9
10

这样可以避免运行阵列末端等问题。

答案 1 :(得分:1)

没有矢量:

#include <iostream>

using namespace std;

int temp=6;
int byreference (int *x){
for (int t=0;t<5;t++){
    *(x+t)=temp+t;     
}
}

int main ()
{   
    int array[5];

    for (int s=0;s<5;s++){
        array[s]=s+1;
        byreference (array);
        cout<<array[s]<<endl;
    }

}

输出:

6
7
8
9
10

答案 2 :(得分:0)

这一行

*x=temp+t;  

确保array中的所有值都设置为10

为什么?

temp设置为6,并且未在程序中更改。

在循环中,

for (int t=0;t<5;t++)
{
    *x=temp+t;  
}

*x正在设置并重置,直到t=4。然后停止。当时*x = 6+4 = 10

如果您希望数组包含6, 7, 8, ...,则可以将byreference更改为:

void byreference (int *x)
{
    *x += temp-1;
}