lnhv013710
2019-04-14 22:36
采纳率: 96.7%
浏览 352

VS2010MFC如何查看CARRAY变量中的成员zhi

我试过在监视窗口手动输入变量pArrayDrawList[1].nCircleCenterX,
在代码区浮动窗口只能看到第一个变量pArrayDrawList[0].
怎样方便的查看其他,谢谢。
另外,我看到有网友写的代码,看不懂,复制再黏贴,将MYARRAY改成pArrayDrawList,报警。

CArray myArray;
int i;

// Allocate memory for at least 32 elements.
myArray.SetSize(32, 128);

// Add elements to the array.
CPoint* pPt = (CPoint*) myArray.GetData();
for (i=0;i < 32;i++,pPt++)
*pPt = CPoint(i, 2*i);

// Only keep first 5 elements and free extra (unused) bytes.
myArray.SetSize(5, 128);
myArray.FreeExtra();

#ifdef _DEBUG
afxDump.SetDepth( 1 );
afxDump << "myArray: " << &myArray << "\n";
#endif

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • wallesyoyo 2019-05-09 13:59
    已采纳

    所有指针型的变量,都能在调试的时候,在Watch窗口查看指针指向内存后面所有元素的值啊。

    只要在Watch窗口里面写上指针变量名加上一个逗号,后面再加上元素个数就可以了啊。

    以你说的CArray为例。

    图片说明

    图片说明

    已采纳该答案
    打赏 评论
  • threenewbee 2019-04-15 09:51

    指针型变量,的确只能看第一个,但是你可以添加watch,或者直接看内存

    图片说明

    打赏 评论
  • lnhv013710 2019-04-15 21:22

    CPoint aa;
    aa.x=10;
    aa.y=20;
    CPoint bb;
    bb.x=40;
    bb.y=80;
    CArray myArray;
    int i;
    // Allocate memory for at least 32 elements.
    myArray.SetSize(32, 128);
    myArray.Add(aa);
    myArray.Add(bb);
    // Add elements to the array.
    CPoint* pPt = (CPoint*) myArray.GetData();
    for (i=0;i < 32;i++,pPt++)
    *pPt = CPoint(i, 2*i);
    // Only keep first 5 elements and free extra (unused) bytes.
    myArray.SetSize(5, 128);
    myArray.FreeExtra();
    #ifdef _DEBUG
    afxDump.SetDepth( 1 );
    afxDump << "myArray: " << &myArray << "\n";
    #endif

    /// myArray.ElementAt(1),也不管用,

    打赏 评论
  • weixin_anvirzh0612 2019-04-17 19:06

    CArray是继承于CObject类,类模板如下:

    template< class TYPE, class ARG_TYPE > class CArray : public CObject
    各参数含义
    TYPE
    指定存储在CArray数组中对象的类型,这个类型参数是用于从CArray中获取值。
    ARG_TYPE
    指定用于访问存储在CArray数组中元素的类型,经常是一个TYPE的一个引用,这个类型的参数是用于传值于CArray。

    说明:CArray类是类似于C语言中索引是以0开始的的数组,但它可以动态增长。

    以您的代码为例要看数组其他index的值如果
    myArray.ElementAt(index)来查看不行的话。也可以用以下代码:

    {
    // TODO: 在此添加控件通知处理程序代码
        CArray<CPoint,CPoint&> myArray;
        int i;
        // Allocate memory for at least 32 elements.
        myArray.SetSize(32, 128);
        // Add elements to the array.
        CPoint* pPt = (CPoint*)myArray.GetData();
        for (i = 0; i < 32; i++, pPt++)
            *pPt = CPoint(i, 2 * i);
        // Only keep first 5 elements and free extra (unused) bytes.
        pPt = (CPoint*)myArray.GetData();
        myArray.SetSize(5, 128);
        myArray.FreeExtra();
    #ifdef _DEBUG
        afxDump.SetDepth(1);
        afxDump << "myArray: " << &myArray << "\n";
    #endif
    }
    
    

    将pPt重新指向数组首地址,然后用*(pPt+index) 来查看(index=1,2,3 ...)如下贴图,请参考:谢谢!~
    图片说明

    打赏 评论

相关推荐 更多相似问题