在vb中,我们可以先定义一个变体数组,然后可以重定义使用,但是在vc中怎么实现此功能呢?
dim arr()
intNumber= Record.RecordCount();
redim arr(intNumber)在vc中,有类似于redim 的方法么?或者说我们一般怎么解决这个问题的呢?
我刚刚接触vc,请各位指点
dim arr()
intNumber= Record.RecordCount();
redim arr(intNumber)在vc中,有类似于redim 的方法么?或者说我们一般怎么解决这个问题的呢?
我刚刚接触vc,请各位指点
CByteArray BYTE型数组
CWordArray WORD型数组
CDWordArray DWORD型数组
CUIntArray unsigned int型数组
CStringArray CString型数组
CPtrArray void *型数组
CObArray CObject *型数组
正如楼上所说数组空间分配是在编译时进行的,不能在运行时改变。要想改变就要使用动态分配内存。以上各类的内部正是这样实现的。它们在初始化的时候被分配一定量的内存,随着你不断扩充,它们会动态扩充内存(其实是重新分配一块更大的内存,然后把以前的数据复制进去)。
以上各类是特定型别的。如果你想为任意一种类的对象创建一个这样的管理者,请使用数组模板:
CArray<class,class&> object;
class是你要管理的对象的类名。object是你要定义的数组对象.
CArray<CStringArray *,CStringArray *> ArryFunc;
intNumber=rs.recordcount;
CStringArray arryFunc[intNumber]; //出错
for(int i=0;i<intNumber;i++)
{
intNumber1 = rs.recordcount;
for(int j=0;j<intNumber1;j++)
arryFunc[j].Add("asdf");
ArryFunc.Add(&arryFunc[j]);
}大伙仔细的看一下这段代码,帮我分析一下吧,,
改成如下,
CArray<CStringArray *,CStringArray *> ArryFunc;
intNumber=rs.recordcount;
CStringArray arryFunc[intNumber]; //出错
for(int i=0;i<intNumber;i++)
{
intNumber1 = rs.recordcount;
for(int j=0;j<intNumber1;j++)
arryFunc[i].Add("asdf");
ArryFunc.Add(&arryFunc[i]);
}大伙仔细的看一下这段代码,帮我分析一下吧,,
出错是当然的,因为intNumber是变量,不能用变量作声明的数组的维数。
你好, 我知道这行出错的,但是我现在找不到更好的方法 据个小例子,说明一下我要实现的功能,
比如说,数据库有2个表,一个为公司表,FirmId
另一个为部门表,FirmId,DeptId
因为有多少个公司是不定的,每个公司对应的部门数量也是不定的,这些数值都需要从数据库中查询出来。现在我是想把公司及公司对应的部门查询出来保存在数组里边(用CArry).CArray<CStringArray *,CStringArray *> ArryFirm; //保存arryDept
intNumber=rsFirm.recordcount; //取得公司的个数
CStringArray arryDept[intNumber]; //出错, 用来保存公司id及部门信息
for(int i=0;i<intNumber;i++)
{
arryDept.Add("FirmId的值");//第一个元素的值为公司id,其余元素的值为对应的部门id
intNumber1 = rsDept.recordcount;//取得某个公司对应的部门的数量
for(int j=0;j<intNumber1;j++)
arryDept[i].Add("部门信息"); ArryFirm.Add(&arryDept[i]); //把某个公司的id及该公司的所有部门id保存起来
}
现在您明白了我要做什么了么?
CStringArray arraydept;
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
arraydept.Add(_T("abcd"));
array.Add(&arraydept);
}
CString(array.GetAt(0)->GetAt(1));
AfxMessageBox(CString(((CStringArray *)array.GetAt(0))->GetAt(1)));
我调试过了这段代码没错,你借鉴一下吧;注意include <afxtempl.h>
你的这段代码产生的 arraydept数组内容没有释放,不是越来越多么?也就是array对应的每一个元素都会包含原来的数据看看这样,可不可以?
CArray<CStringArray *,CStringArray *> array;//公共的数组
CStringArray *pDept;
for(int i=0;i<10;i++){
pDept = new CStringArray;
for(int j=0;j<10;j++)
pDept->Add(_T("abcd"));
array.Add(pDept);
} 这样就有一个内存释放的问题,看看这样释放可不可以?
//当我们对array这个数组使用完后(array可能要在别的函数里边使用,因此array应该为公共的数组), for (int j=0 ; j< array.GetSize();j++)
{
CStringArray * pArray = array.GetAt(j);
delete(pArray);
}