动态创建指针数组时,Visual Studio 不显示完整数组
Posted
技术标签:
【中文标题】动态创建指针数组时,Visual Studio 不显示完整数组【英文标题】:Visual Studio doesn't show full array when when dynamically creating array of pointers 【发布时间】:2019-01-04 14:30:41 【问题描述】:我的代码:
#include "pch.h"
#include <iostream>
using namespace std;
int main()
char** pptr = new char*[5];
for (int i = 0; i < 5; i++)
pptr[i] = new char[5];
我想要发生的是pptr
现在指向一个由 5 个指针组成的数组的开头,每个指针指向一个由 5 个字符组成的数组的开头。
我在main函数的最后放了一个断点,加上pptr
观察,它只存储一个指针。为什么会发生这种情况,我该如何正确地做到这一点?
【问题讨论】:
你说你想让pptr
指向一个指针数组的beginning...数组的beginning确实是one 指针 - array 中的第一个 指针。其他指针稍后出现在同一个数组中。
下次请把图片缩小到有趣的部分,不要有那么大的白边;-)
【参考方案1】:
这是 Visual Studio 中指针类型的默认知识。你在代码中指出char** pptr
是一个指针,但它不知道有多大。
要解决此问题,您可以在 pptr[0]
上添加一个手表,然后您可以通过将其更改为 pptr[0],5
来指定它的“大小”为 5。此外,如果大小是可变的,您可以执行“ptr[0],[size]”,其中 size 是计算要显示的元素数量的表达式。
【讨论】:
这是一个解决烦人问题的有趣方法,我以后会尝试。虽然我很惊讶,因为pptr[0],5
在 c++ 中具有独特的含义。当调试器以与语言相同的方式处理大多数运算符时,任意对某些运算符进行不同的解释似乎是不一致的。
是的,,
特定于调试器监视变量。我不确定它是否可以使用逗号运算符作为表达式。可能会在某个地方触发一堆错误!
是的很奇怪,是否不能像我建议的那样将要显示的元素类型更改为char*[5]
是c++? (我不使用 Visual Studio)
不,它只显示 VS 理解的类型。但是,您也可以在表达式中始终使用reinterprect_cast
(我认为)。
是的,您应该能够取消引用指针并将其转换为对 5 char*
的数组的引用,我认为它写成 char*(&)[5]
。编辑:手表表达式(char*(&)[5])(*pptr)
将给你pptr
作为5 个char*
的数组。编辑 2:虽然pptr,5
仍然是一种更好的方法。【参考方案2】:
你的程序做你想做的事,但调试器不知道元素的数量,它只知道它是一个指针,所以它写了那个指针的包含。
我不知道你用的是什么调试器,但可能当你显示值时你可以通过 char*[5]` 修改 char**
以查看全部
【讨论】:
【参考方案3】:// #include "pch.h"
#include <iostream>
using namespace std;
int main()
char** pptr = new char*[5];
for (int i = 0; i < 5; i++)
pptr[i] = new char[5];
for(int i=0;i<5;i++)
char ch='A';
pptr[0][i]=ch;
for(int i=0;i<5;i++)
cout<<pptr[0][i]<<" ";
现在,作为指针的 pptr[0] 指向一个字符数组。希望对您有所帮助。
【讨论】:
问题不在于代码,而在于调试器默认显示的内容以上是关于动态创建指针数组时,Visual Studio 不显示完整数组的主要内容,如果未能解决你的问题,请参考以下文章
使用Visual Studio 2017学习c ++ [重复]
Visual Studio 调试中将结构体指针转换为结构体数组查看
C++ 项目在 Visual Studio 2019 中触发了断点