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

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

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

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

以你说的CArray为例。

图片说明

图片说明

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

图片说明

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),也不管用,

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 ...)如下贴图,请参考:谢谢!~
图片说明