通常用vscode调试c或c++代码时,如果要查看一个指针指向的值,只能看到指针表示的地址和该指针指向的值。而如果该指针是一个动态分配的数组的时候,只能看到数组第一个数的值,如图所示。
接下来我将给出解决方案。
一维数组
首先创建一个动态分配的一维数组:
int n = 10;
int *array = (int *)malloc(n*sizeof(int));
memset(array, 1, n*sizeof(int));
如果直接debug时查看array指针,并不能看到数组所有的值。
查看debug窗口,有一个watch(监视窗口)小窗口,可以添加想要查看的变量的值。
添加*(int(*)[10])array或*array@10后就可以查看array数组的所有值,也就是添加:
*(type(*)[size])pointer, 其中type是数组类型,size是数组长度,pointer是分配空间的数组指针。该方法将指针强制转化为一个数组。
*pointer@size,该方法同样可以查看数组的值。
效果如下:
多维数组
定义一个动态分配的多维数组
//等效于arr[2][3][4]
int ***arr;
int m = 2, n = 3, t = 4;
if((m > 0) && (n > 0) && (t > 0))
{
arr = (int***)malloc(sizeof(int)*m);
for(i = 0;i < m;i++)
{
arr[i] = (int**)malloc(sizeof(int)*n);
for (k = 0;k < n;k++)
{
arr[i][k] = (int*)malloc(sizeof(int)*t);
}
}
}
在窗口中添加***arr@2@3@4和(int(*)[3][2][4])arr,就可以查看数组的值。
查看多维数组通项的公式为:
**...arr@...@size2@size1
*(type(*)[size1][size2][...])arr