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];