我是C ++的新手,只是学习指针,并尝试使用指针和数组创建一个简单的数字行程序(我知道我可以用更简单的方式做到这一点,但它只是为了实践)。但是,当我尝试运行我的代码时,它会在尝试分配数组时冻结。
#include<iostream>
using namespace std;
void createLine(int* p_line, int size);
void printLine(int* p_line, int size);
int main(){
int* p_line = NULL;
int size = 0;
cout << "Enter the size of the number line: ";
cin >> size;
createLine(p_line, size);
printLine(p_line, size); //It doesn't work when printLine is here
delete[] p_line;
}
void createLine(int* p_line, int size){
cout << "Size of the number line: " << size << "." << endl;
p_line = new int[size];
for(int i = 0; i < size; i++){
p_line[i] = i + 1;
}
//If printLine is here, it works
}
void printLine(int* p_line, int size){
cout << "Printing line: ";
for(int i = 0; i < size; i++){
cout << p_line[i] << " , ";
}
}
奇怪的是,如果我将printLine调用移动到createLine的末尾,程序运行完全正常。我试过在互联网上寻找,但我发现的一切似乎都表明这应该可以正常运行。
我能想到的唯一解释是程序在createLine完成运行之前尝试运行printLine,因此当它仍然为NULL时,它会尝试访问p_line。但如果我正确理解C ++,这不应该发生,对吧?
非常感谢任何解释,谢谢!
答案 0 :(得分:1)
C / C ++中的参数按值传递。因此,您对p_line
中createLine()
的更改将被废弃。
您可以返回新值,或使用引用(int *&p_line
)或使用双指针(int **p_line
)。