为什么void add(people** arr, const int nov) { people* p = new people(); cout << "enter name" << endl; cin >> p->name; cout << "enter work" << endl; cin >> p->work; cout << "enter handlework" << endl; cin >> p->handlework; p->nov = nov; people** newarr = new people * [nov]; newarr[nov - 1] = p; for (int i = 0; i < nov - 1; i++) { newarr[i] = arr[i]; } //delete[]arr; arr = newarr; }取不到newarr的值
时间: 2024-04-17 14:25:15 浏览: 8
在这段代码中,`void add(people** arr, const int nov)`函数中的`arr`参数是一个指向指针数组的指针。当我们在函数内部对`arr`进行修改时,实际上只是修改了指针本身的值,并不会修改指针指向的内存空间。
在这段代码中,`arr = newarr;`语句只是将`arr`指针指向了`newarr`指针数组的内存空间,并没有修改原始指针数组的内容。因此,在函数外部访问`arr`时,无法获取到`newarr`的值。
如果你想要修改原始指针数组的内容,你需要将`arr`声明为指向指针数组的引用,即`people**& arr`。这样,在函数内部修改`arr`时,会直接修改原始指针数组的内容。
修改后的代码如下:
```cpp
void add(people**& arr, const int nov) {
people* p = new people();
cout << "enter name" << endl;
cin >> p->name;
cout << "enter work" << endl;
cin >> p->work;
cout << "enter handlework" << endl;
cin >> p->handlework;
p->nov = nov;
people** newarr = new people * [nov];
newarr[nov - 1] = p;
for (int i = 0; i < nov - 1; i++) {
newarr[i] = arr[i];
}
delete[] arr;
arr = newarr;
}
```
这样,当你调用`add`函数并传入指针数组的引用时,`arr`的修改将会影响到原始指针数组。