指向动态分配的内存时,指针指针的指定值是多少?

时间:2015-09-16 16:52:46

标签: c++ dynamic-memory-allocation pointer-to-pointer pointer-to-array

考虑以下情况:

int **my_array = new int*[10];
  1. 我们在这里分配给my_array什么?
  2. my_array是一个指向什么的指针?
  3. 有没有办法迭代my_array(指针)并设置一个二维整数数组(而不是int *)?

2 个答案:

答案 0 :(得分:3)

我们将my_array分配给数组的地址。该数组包含指向其他数组的指针,但还没有。

是的,我们可以这样做:

int **my_array = new int*[10];

for(int i=0; i<10; ++i)
  my_array[i] = new int[13];

my_array[2][11] = 500;

答案 1 :(得分:1)

  

我们在这里分配给my_array什么?

您可以为int*的元素分配my_array。 E.g。

my_array[0] = new int[20];

int i;
my_array[0] = &i;
  

my_array是一个指向什么的指针?

它指向一个包含10个int*个对象的数组。

  

有没有办法迭代my_array(指针)并设置一个二维整数数组(而不是int *)?

不确定您希望在此处看到什么。 my_array的元素只能是int*

如果希望my_array成为2D数组的指针,可以使用:

int (*my_array)[20] = new int[10][20];

现在,您可以使用my_array[0][0]my_array[9][19]

PS 如果这是您尝试理解指针和数组,那一切都很好。如果您尝试在工作程序中部署此代码,请不要再使用原始数组。使用std::vectorstd::array

对于1D阵列,请使用:

// A 1D array with 10 elements.
std::vector<int> arr1(10);

对于2D数组,请使用:

// A 2D array with 10x20 elements.
std::vector<std::vector<int>> arr2(10, std::vector<int>(20));