借助new关键字在c ++中创建指针数组

时间:2018-10-13 07:05:18

标签: c++ arrays pointers

下面的代码是什么意思?

int **matrix = new int*[n]

matrixint*[n]之间有什么区别?

7 个答案:

答案 0 :(得分:2)

例如,有板球队,您需要

由于您拥有板球*团队,这表明您拥有两个可能的人之一

情况:

1)指向单个CricketPlayer(或任何派生的)类型的指针

2)指向CricketPlayer(但不是派生的)类型数组的指针。

您想要的是一个指向CricketPlayer或派生类型的数组的指针。所以你

需要**。

您还需要分别分配每个团队成员并将其分配到数组:

            // 5 players on this team

          CricketPlayer** team = new CricketPlayer*[5];

          // first one is a bowler

          team[0] = new Bowler();

         // second one is a hitter

          team[1] = new Hitter();

           // etc

//然后释放内存

         delete team[0];
         delete team[1];
         delete[] team;

在您的查询中,

           It can be understood as

              int *matrix[]=new int*[n];

所以有n个指针指向n个地方。

因为

               int *foo;

                foo=new int[5];

还将创建5个连续的位置,但它是相同的指针。

see this

在我们的例子中是指针数组

答案 1 :(得分:2)

您需要注意以下几点:

  • int *p意味着p是一个指向int变量或一个int变量数组的指针。
  • int* *p意味着p是指向int*变量或int*变量数组的指针。
  • new int[5]是5个int变量的数组。
  • new int*[5]是5个int*变量的数组。

在这种情况下,matrix是第二种类型,因此它可以指向int*变量数组,因此语句:int **matrix = new int*[n]是合法的

答案 2 :(得分:1)

这意味着您已经声明了一个称为矩阵的双指针(类型为int),并分配了一个由n个int *指针组成的数组。
现在,您可以将matrix [i]用作int *指针(0 <= i 稍​​后,您可能希望将内存分配给各个指针,就像matrix [i] = new int [size];(size是int或更合适的size_t)

答案 3 :(得分:1)

它是“ n”个指针的数组,可以为它们分配内存并在循环中初始化。 如果n为3,则它是3个元素组成的数组,每个元素都是指向int的指针,可以指向整数数组的集合,如下所示。

            matrix[0] -> Ox001  points to  array of int [ 1 2 3 4]
            matrix[1] -> Ox017                          [ 5 6 7 8]
            matrix[2] -> Ox024                          [ 9 10 11 12]

示例代码

           int **m = new int*[3];
           for(auto i=0; i < 3; i++)
           {
               m[i] = new int[3];
               for(auto j=0; j < 3; j++)
                   m[i][j] = 0;
           }


           for(auto i=0; i < 3; i++)
           {
               m[i] = new int[3];
               for(auto j=0; j < 3; j++)
                   cout << m[i][j];
               cout << "\n";
           }

答案 4 :(得分:0)

matrix是类型int **对象。此类型是指向int的指针。

另一方面,int *类型,是指向int的指针。

表达式

new int*[n]

在内存中的某个位置创建n类型的int *相邻对象,并返回指向第一个对象的指针。换句话说,它分配和构造指向n的{​​{1}}指针;并返回指向第一个的指针。由于第一个(及其每个)均为int,因此指向第一个的指针的类型为int *

答案 5 :(得分:0)

如果您还记得运算符的关联性和优先级,那将是绝对清楚的。

通过int * [n]将由编译器解释:作为“指向整数的n个指针”的数组。(由于[]的优先级比*大,因此为了易于理解,编译器以这种方式解释它。)

现在,指向另一侧的int **矩阵是指向指针的指针。 创建指针数组时,您基本上具有第一个位置的地址,这里第一个位置存储一个指向整数的指针。

因此,当您存储此类数组的第一个地址的地址时,将需要指向整个数组的指针。

答案 6 :(得分:0)

//用于将矩阵作为指针传递并作为指针返回的代码

 int ** update(int ** mat)
{
    mat[0][1]=3;


    return mat;
}


int main()
{   int k=4;
    int **mat = new int*[k];

           for(auto i=0; i < k; i++)
           {
               mat[i] = new int[k];
               for(int j=0;j<k;j++)
               {
                   if(i==j)
                     mat[i][j]=1;
                   else
                    mat[i][j]=0;
               }

           }

          mat=update(mat);
           for(auto i=0; i < k; i++)
           {

               for(auto j=0; j < k; j++)
                   cout << mat[i][j];
               cout << "\n";
           }
    return 0;
}