动态创建指针数组时,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*(&amp;)[5]。编辑:手表表达式(char*(&amp;)[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 中的模板化函数指针数组

使用Visual Studio 2017学习c ++ [重复]

Visual Studio 调试中将结构体指针转换为结构体数组查看

C++ 项目在 Visual Studio 2019 中触发了断点

C++ Visual Studio 非标准语法使用 '&' 创建指向成员的指针

C++ Visual Studio 2015“非标准语法;使用 '&' 创建指向成员的指针”