下面的代码是什么意思?
int **matrix = new int*[n]
matrix
和int*[n]
之间有什么区别?
答案 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个连续的位置,但它是相同的指针。
在我们的例子中是指针数组
答案 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
答案 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;
}