让它成为动态分配数组的创建函数:
void create(int *&a, int dim){
a=new int[dim];
for(int i=0;i<dim;i++){
a[i]=i+1;
}
在这里,我需要参考(&
)。
现在,我有一个动态分配矩阵的创建函数:
void create(int **&a,/* int**a, */ int lines,int rows){
...
}
我看到该引用对于动态分配矩阵创建函数是可选的。为什么呢?
答案 0 :(得分:1)
如果要分配“外部”数组 - 行,则需要引用。没有它,您只能分配“内部”数组 - 行(如果已经分配了“外部”数组)。所以在你的情况下,参考是强制性的。
void create(int **a, int lines, int rows)
{
a = new int*[lines]; // passed pointer to 'a' will point to an old address
for(int i = 0; i < lines; i++)
a[i] = new int[rows];
}
答案 1 :(得分:0)
如果要修改传递给函数内部函数的指针,需要通过引用传递。
所以不,在您的情况下,引用不是可选的。无论你在哪里看到它是可选的,都是错误的。
答案 2 :(得分:0)
我的坏。对不起 我看到assignValues函数中的refference是不必要的,所以我认为创建函数也是不必要的。 谢谢大家的回复。 我再次抱歉。 这是我的代码:
#include <iostream>
#include <conio.h>
using namespace std;
void create(int **&a, int lines, int rows){
int i;
a = new int*[lines];
for (i = 0; i < lines; i++){
a[i] = new int[rows];
}
}
void assignValues(int **a, int lines, int rows){
int i,j,k = 1;
for (i = 0; i < lines; i++){
for (j = 0; j < rows; j++){
a[i][j] = k;
k++;
}
}
}
void print(int **a, int lines, int rows){
int i, j;
cout << "Matrix is: "<<endl;
for (i = 0; i < lines; i++){
for (j = 0; j < rows; j++){
printf("%3d",a[i][j]);
}
cout << endl;
}
}
int main()
{
int lines = 5;
int rows = 4;
int **a = 0;
create(a, lines, rows);
assignValues(a, lines, rows);
print(a, lines,rows);
_getch();
return 0;
}