首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

向量互换

2013-01-23 
向量交换目的是把一个向量和矩阵里的一行交换(数据都是char)。我想测试写的对不对,就把它打印出来。测试用一

向量交换
目的是把一个向量和矩阵里的一行交换(数据都是char)。我想测试写的对不对,就把它打印出来。
测试用一个初始化5*5的全零矩阵(零为了显示用字符48),把第二行和一个“11111”的向量交换,结果这样
向量互换
问题:没有正确交换到第二行呀,而且最后一行什么都没有(说明真是0)。矩阵定义和初始化是别人写的,肯定没错,只能是我自己写的交换或者打印错了。。是哪儿错了呢?

矩阵是这么定义的:
typedef struct BitMatrix_Tag{
UINT16 aRows;//矩阵的行数
        UINT16 aCols;//矩阵的列数
UINT16 aLen;//矩阵一行的长度(Bytes)
UINT8 *pBitData;//按比特存储矩阵信息,按4字节对齐
UINT8 **ppRows;//存储各行的起始地址
}
关于行向量和矩阵里的数据,在矩阵初始化里分别是这么写的。
memset(pMat->pBitData,48,pMat->aRows*pMat->aLen);
for(i=0;i<pMat->aRows;++i){
    pMat->ppRows[i]=pMat->pBitData+i*pMat->aLen;
}

我的交换函数是这么写的
void RowExchgEq(UINT16 aR, UINT8*pEq, UINT16 aL, PtrBitMat pMat){
UINT8 *pTmp=NULL;
pTmp=(UINT8*)malloc(aL);
memcpy(pTmp, pMat->ppRows[aR], aL);
memcpy(pMat->ppRows[aR],pEq,aL);
memcpy(pEq,pTmp,aL);
}

打印是这么写的
void printbm(UINT16 aL, PtrBitMat pMat){
int i=0,j=0;
for(i=0;i<aL;i++){
for(j=0;j<aL;j++)
cout<<pMat->pBitData[i*aL+j];
cout<<endl;
}
}

之前交换写的是UINT8 *pTmp=pMat->ppRows[aR];
pMat->ppRows[aR]=pEq;
pEq=pTmp;
但这样用上面那种打印方式就什么都不变,又不知道这样怎么打印。
感觉这是很简单的问题,我都不明白,太笨了我
[解决办法]
把整個程序貼上來,可能看得更明白些。

热点排行