C++ c+中的指针+; 维数组的这个图应该给你一个想法。此外,你应该考虑纳瓦兹的“解数组”的答案,因为资源是由程序员管理的。
例如:C++ c+中的指针+; 维数组的这个图应该给你一个想法。此外,你应该考虑纳瓦兹的“解数组”的答案,因为资源是由程序员管理的。,c++,pointers,C++,Pointers,例如: int* A = new int[5]; 制作一个数组条,它是如何在int**A中发生的 #include <iostream> using namespace std; int main () { int **A; A = new int*[10] ; for (int j=0; j<20; j++) A[j] = new int[20] ; for (int i=0; i<10; i++) f
int* A = new int[5];
制作一个数组条,它是如何在int**A
中发生的
#include <iostream>
using namespace std;
int main () {
int **A;
A = new int*[10] ;
for (int j=0; j<20; j++)
A[j] = new int[20] ;
for (int i=0; i<10; i++)
for (int j=0; j<20; j++)
A[i][j] = (i+1)*(j+1);
for (int i=0; i<10; i++) {
for (int j=0; j<20; j++)
cout << A[i][j] << " ";
cout << endl;
}
cout << endl;
}
#包括
使用名称空间std;
int main(){
国际**A;
A=新整数*[10];
对于(int j=0;j它是指向指针的指针。在本例中,它是一个2D数组。它是指向指针的指针。在本例中,它是一个2D数组。是的。这是二维数组:更准确地说,是指向指针的指针
一旦处理完毕,您就必须取消分配它。这是您删除它的方式:
for (int j=0; j<20; j++)
delete[] A[j];
delete[] A;
也就是说,如果使用std::vector
,那么就不必担心内存的分配和释放
ideone上的演示:是的。这是二维数组:更准确地说,指针指向指针
一旦处理完毕,您就必须取消分配它。这是您删除它的方式:
for (int j=0; j<20; j++)
delete[] A[j];
delete[] A;
也就是说,如果使用std::vector
,那么就不必担心内存的分配和释放
ideone上的演示:这两个开头意味着它是指向指针的指针。这一行:
A = new int*[10];
为10个int*
值分配空间。之后,这些int*
值中的每一个都用以下值初始化:
for (int j=0; j<20; j++)
A[j] = new int[20];
for(int j=0;j两个开头表示它是指向指针的指针。此行:
A = new int*[10];
为10个int*
值分配空间。之后,这些int*
值中的每一个都用以下值初始化:
for (int j=0; j<20; j++)
A[j] = new int[20];
for(int j=0;jint**A;
表示它是指向指针的指针。这通常用于表示二维数组。在您的程序中-
int *A; A = new int[10] ;
for (int j=0; j<20; j++)
A[j] = new int[20] ; // A[j] means dereferencing to the location itself. So, it should hold `int`
// as stated but not `int*` that is returned by new operator.
A
是指向指针的指针。因此,A应该保存指针的地址或可以保存指针地址的数组。因此
A = new int*[10] ;
A
保存大小为10
的指针数组的起始地址。现在这仍然是错误的
for (int j=0; j<20; j++)
A[j] = new int[20] ; // Because `A[j]` is invalid from 10-19. There is no such index where A[j] can dereference to. So, j should run from 0 to 10 instead.
现在,每个指针指向20个int位置。因此,数组中有10*20个元素
< <强> 2×3 < /强>维数组的这个图应该给你一个想法。此外,你应该考虑纳瓦兹的“解数组”的答案,因为资源是由程序员管理的。
int**A;
表示它是指向指针的指针。这通常用于表示二维数组。在您的程序中-
int *A; A = new int[10] ;
for (int j=0; j<20; j++)
A[j] = new int[20] ; // A[j] means dereferencing to the location itself. So, it should hold `int`
// as stated but not `int*` that is returned by new operator.
A
是指向指针的指针。因此,A应该保存指针的地址或可以保存指针地址的数组。因此
A = new int*[10] ;
A
保存大小为10
的指针数组的起始地址。现在这仍然是错误的
for (int j=0; j<20; j++)
A[j] = new int[20] ; // Because `A[j]` is invalid from 10-19. There is no such index where A[j] can dereference to. So, j should run from 0 to 10 instead.
现在,每个指针指向20个int位置。因此,数组中有10*20个元素
< <强> 2×3 < /强>维数组的这个图应该给你一个想法。此外,你应该考虑纳瓦兹的“解数组”的答案,因为资源是由程序员管理的。
要创建二维数组,您可以创建一个数组数组(这会导致锯齿状数组),也可以创建一个一维数组,并以类似于二维数组的方式引用它(第二种方法有点笨拙)
//数组的数组
int**A=new int*[5];//可能包含5个int数组的数组
对于(int i=0;i<5;++i)
{
A[i]=新整数[5];
}
//使用两个括号访问阵列
[0][0]=1;//第0行和第0列中的元素=1
[1][0]=2;//第一行中的元素,第零列=2
//在删除数组数组之前,必须先删除内部数组
对于(int i=0;i<5;++i)
{
删除[]A[i];
}
删除[]A;
要创建二维数组,您可以创建一个数组数组(这会导致锯齿状数组),也可以创建一个一维数组,并以类似于二维数组的方式引用它(第二种方法有点笨拙)
//数组的数组
int**A=new int*[5];//可能包含5个int数组的数组
对于(int i=0;i<5;++i)
{
A[i]=新整数[5];
}
//使用两个括号访问阵列
[0][0]=1;//第0行和第0列中的元素=1
[1][0]=2;//第一行中的元素,第零列=2
//在删除数组数组之前,必须先删除内部数组
对于(int i=0;i<5;++i)
{
删除[]A[i];
}
删除[]A;
首先需要知道的是指针和C和C++中数组的区别。数组<代码>类型数组[大小] < /代码>是大小连续的单元(类型)数据。指针是包含地址的变量。混淆的原因是指针用于存储动态分配数组的第一个单元格的地址(C中的malloc,C++中的new[])
那么,int数组[10]
和int*pi
之间有什么区别呢?数组是一个大小为10 int的内存区域,pi是一个包含int地址的变量
要声明二维数组,您可以键入:int-array2d[10][10]
,也可以声明一个“指针指向指针”,例如int**ppi
。不要忘记,如果使用第二个id,则必须同时分配第一个(指针数组)和第二个(实际的int数组)维度:首先需要知道的是指针和数组在C和C++中的区别。数组<代码>类型数组[大小] < /Cord>是大小连续的单元(类型)数据。指针是包含地址的变量。混淆的原因是指针用于存储动态分配数组的第一个单元格的地址(C中的malloc,C++中的new[])
那么,int数组[10]
和int*pi
之间有什么区别呢?数组是一个大小为10 int的内存区域,pi是一个包含int地址的变量
申报两个di