为什么我可以在没有参考的情况下操作动态矩阵

Why I can manipulate dynamic matrix without reference

本文关键字:操作 情况下 动态 参考 我可以 为什么      更新时间:2023-10-16

让它成为动态分配数组的创建函数:

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){
   ...
}

我看到了动态分配矩阵创建函数的引用是可选的。为什么?

如果要分配"外部"数组行,则需要引用。没有它,您只能分配"内部"数组-行(如果已经分配了"外部"数组)。因此,在您的情况下,推荐信是强制性的。

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

如果要修改传递到函数内部函数的指针,则需要通过引用传递。

所以不,在您的情况下,引用是而不是可选的。无论你在哪里看到它是可选的,都是错误的。

我的坏。对不起。我看到assignValues函数中的refreference是不必要的,所以我认为create函数也没有必要。谢谢大家的回复。再次,我很抱歉。这是我的代码:

#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;
}
相关文章: