C++ 当指针指向动态分配的内存时,指向指针的指针会被分配什么值?
考虑以下情况:C++ 当指针指向动态分配的内存时,指向指针的指针会被分配什么值?,c++,dynamic-memory-allocation,pointer-to-pointer,pointer-to-array,C++,Dynamic Memory Allocation,Pointer To Pointer,Pointer To Array,考虑以下情况: int **my_array = new int*[10]; 我们在这里为我的_数组分配什么 my_array是指向什么的指针 有没有办法遍历我的_数组(指针)并设置一个二维整数数组(而不是int*) 我们将数组的地址分配给my_array。该数组包含可以指向其他数组的指针,但还不能指向其他数组 是的,我们可以这样做: int **my_array = new int*[10]; for(int i=0; i<10; ++i) my_array[i] = new i
int **my_array = new int*[10];
my_array
是指向什么的指针我们将数组的地址分配给
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;
int**my_array=new int*[10];
对于(int i=0;i我们将数组的地址分配给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;
int**my_array=new int*[10];
对于(int i=0;i
我们在这里为我的数组分配什么
您可以将int*
分配给my\u数组的元素
my_array[0] = new int[20];
或
my_array
是指向什么的指针
它指向一个由10个int*
对象组成的数组
是否有任何方法可以遍历my_数组(指针)并设置一个二维整数数组(而不是int*)
不确定您希望在此处看到什么。my_array
的元素只能是int*
如果希望my_array
成为指向2D数组的指针,可以使用:
int (*my_array)[20] = new int[10][20];
现在您可以通过我的数组[9][19]
使用我的数组[0][0]
PS如果您试图理解指针和数组,这一切都很好。如果您试图在工作程序中部署此代码,请不要再使用原始数组。请使用或
对于一维阵列,请使用:
// A 1D array with 10 elements.
std::vector<int> arr1(10);
// A 2D array with 10x20 elements.
std::vector<std::vector<int>> arr2(10, std::vector<int>(20));
//包含10个元素的1D数组。
std::载体arr1(10);
对于二维阵列,请使用:
// A 1D array with 10 elements.
std::vector<int> arr1(10);
// A 2D array with 10x20 elements.
std::vector<std::vector<int>> arr2(10, std::vector<int>(20));
//包含10x20个元素的二维数组。
std::vector arr2(10,std::vector(20));
我们在这里为我的数组分配什么
您可以将int*
分配给my\u数组的元素
my_array[0] = new int[20];
或
my_array
是指向什么的指针
它指向一个由10个int*
对象组成的数组
是否有任何方法可以遍历my_数组(指针)并设置一个二维整数数组(而不是int*)
不确定您希望在此处看到什么。my_array
的元素只能是int*
如果希望my_array
成为指向2D数组的指针,可以使用:
int (*my_array)[20] = new int[10][20];
现在您可以通过我的数组[9][19]
使用我的数组[0][0]
PS如果您试图理解指针和数组,这一切都很好。如果您试图在工作程序中部署此代码,请不要再使用原始数组。请使用或
对于一维阵列,请使用:
// A 1D array with 10 elements.
std::vector<int> arr1(10);
// A 2D array with 10x20 elements.
std::vector<std::vector<int>> arr2(10, std::vector<int>(20));
//包含10个元素的1D数组。
std::载体arr1(10);
对于二维阵列,请使用:
// A 1D array with 10 elements.
std::vector<int> arr1(10);
// A 2D array with 10x20 elements.
std::vector<std::vector<int>> arr2(10, std::vector<int>(20));
//包含10x20个元素的二维数组。
std::vector arr2(10,std::vector(20));
如何取消分配所有动态分配的内存?如果新[]
表达式中除第一个以外的任何表达式引发异常(因此在修复前进行向下投票),则此代码会泄漏。若要修复此问题,请改为使用std::vector
。@elyse:注意了,但我不想引发异常处理(没有双关语)对于一个仍在与数组作斗争的初学者来说。当你回答人们的问题时,你应该帮助他们,而不仅仅是让事情变得更糟。这让事情变得更糟。你甚至没有解决这个问题都是懒惰的。你必须解决这个问题,因为你没有重复使用其他人的解决方案。这段代码具有致命的安全性任何人都不应该使用这些问题,尤其是初学者,因为他们永远都不可能很好地解决这些问题。如何释放所有动态分配的内存?如果除了第一个new[]
表达式之外的任何表达式抛出异常,则此代码将泄漏(因此,在修复之前进行向下投票)。若要解决此问题,请改用std::vector
。@elyse:我已抓住要点,但我不想抛出异常处理(没有双关语)对于一个仍在与数组作斗争的初学者来说。当你回答人们的问题时,你应该帮助他们,而不仅仅是让事情变得更糟。这让事情变得更糟。你甚至没有解决这个问题都是懒惰的。你必须解决这个问题,因为你没有重复使用其他人的解决方案。这段代码具有致命的安全性ty问题,任何人都不应该使用它,尤其是初学者,因为他们永远不可能很好地解决这些问题。Removeddynamic Array
tag:tag明确指出,这是关于数据结构的,在这种结构中,可以添加或删除元素,而无需明确的内存分配。感谢编辑:-)RemovedDynamicArray
tag:tag明确表示,这是关于可以添加或删除元素而无需显式内存分配的数据结构。感谢编辑:-)我还没有介绍std::vector。谢谢你的回答。我还没有被介绍给std::vector。谢谢你的回答。