【问题标题】:Why I can manipulate dynamic matrix without reference为什么我可以在没有参考的情况下操纵动态矩阵
【发布时间】:2015-03-07 10:42:35
【问题描述】:

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

void create(int *&a, int dim){
    a=new int[dim];
    for(int i=0;i<dim;i++){
    a[i]=i+1;
}

在这里,我需要参考 (&amp;)。 现在,我有一个动态分配矩阵的创建函数:

void create(int **&a,/* int**a, */ int lines,int rows){
   ...
}

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

【问题讨论】:

  • “我看到引用是可选的......” - 证明它。显示构建指针数组的代码没有通过引用传递int **a
  • 遇到 reference to pointerreference to pointer to pointer 之类的复杂情况,是时候开始感受他们值得上课了.
  • 您应该解释一下“可选”的确切含义。
  • 您可能在一个没有很好解释的地方看到了这一点。许多在线教程甚至会让专家感到困惑。

标签: c++ arrays pointers reference


【解决方案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];
}

【讨论】:

    【解决方案2】:

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

    所以不,在您的情况下,参考是 not 可选的。无论您在哪里看到它是可选的,都是错误的。

    【讨论】:

      【解决方案3】:

      我的错。对不起。 我看到 assignValues 函数中的引用不是必需的,所以我认为 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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-12
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 1970-01-01
        • 2014-11-16
        • 1970-01-01
        相关资源
        最近更新 更多