Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c+中的指针+; 维数组的这个图应该给你一个想法。此外,你应该考虑纳瓦兹的“解数组”的答案,因为资源是由程序员管理的。_C++_Pointers - Fatal编程技术网

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;j
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;
表示它是指向指针的指针。这通常用于表示二维数组。在您的程序中-

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