C++程序,比较基础、简单

class Tuple
{

public:
    int * arr;
    Tuple(){
        int a[10];
        arr = a;
        for (int i = 0; i < 10; ++i) {
            a[i] = 0;
        }
    }
    void input(int i, int v){
        arr[i] = v;
    }
    void output(int i){
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }
};
int main(){
    Tuple t;
    t.input(5,10);
    t.output(5);
    return 0;
}

这个是给arr[i]赋值(input和ouput)
这里面有一个问题

 void output(int i){
        cout << "arr[" << i << "] = " << arr[i] << endl;
    }
这一段如果换成
void output(int i){
        cout << "arr[" << "] = " << arr[i] << endl;
 }
运行结果会显示被函数改变的值10
为什么????

222

arr[i],i=5时你赋的值就是10啊,但是你这样并没有对其他位置上的数赋值,,a[]数组局部变量调用完构造函数就被释放了,arr就是一个野指针了

Tuple(){
int a[10];
arr = a;
这么写的话,a数组只是一个临时变量,构造函数结束后,这个数组会被系统回收空间,也就是这个数组内容不再被当前程序控制,可能被操作系统分配给其它变量或者进程,因此实际内容就无法判定了。你应该动态分配空间,或者将数组定义为成员变量,而不是指针
改为
Tuple() {
arr = new int[10];