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

问一个typeof结构的有关问题。

2013-01-01 
问一个typeof结构的问题。。这是一个稀疏矩阵转换存储方式的问题。代码是这样的:#include stdio.h#include

问一个typeof结构的问题。。
这是一个稀疏矩阵转换存储方式的问题。

代码是这样的:


#include <stdio.h>
#include <stdlib.h>

int matrix[3][3] = {
{0, 0, 2, 0}
,{3, 0, 0, 1}
,{0, 4, 0, 0}
,{8, 0, 0, 0}
};

#define MAXSIZE 12

typedef struct{
int i,j;
int e;
}Triple;
typedef struct{
Triple data[MAXSIZE + 1];
int mu,nu,tu;
}TSMatrix;


TSMatrix convertTSmatrix(int m[3][3])
{
TSMatrix msmatrix;
msmatrix.mu = sizeof(m) - 1;
msmatrix.nu = sizeof(m[0]) - 1;
Triple triples[MAXSIZE + 1];

int tCount = 0;
int i, j;
for (i = 0; i < msmatrix.mu; i++)
{
for (j = 0; j < msmatrix.nu; j++)
{
Triple triple;
if (m[i][j] != 0)
{
triples[tCount].i = i;
triples[tCount].j = j;
triples[tCount].e = m[i][j];
tCount++;
}
}
}
msmatrix.tu = tCount;
msmatrix.data = triples;//此处有问题,错误提示说指针不能赋值到数组。
return msmatrix;
}

int main()
{
/*
[0, 0, 2, 0]
[3, 0, 0, 1]
[0, 4, 0, 0]
[8, 0, 0, 0]

*/
TSMatrix tsMatrix = convertTSmatrix(matrix);
int a[10];
printf("maxsize=%i", sizeof(a));
return 0;
}


新手求教!


[解决办法]
typedef struct{
    Triple* data;
    int mu,nu,tu;
}TSMatrix;

or change from:
msmatrix.data = triples;//此处有问题,错误提示说指针不能赋值到数组。
to the following codes:
std::copy(msmatrix.data,msmatrix.data+MAXSIZE ,triples);

[解决办法]
#include <stdio.h>
#include <stdlib.h>

int matrix[4][4] = {
            {0, 0, 2, 0}
            ,{3, 0, 0, 1}
            ,{0, 4, 0, 0}
            ,{8, 0, 0, 0}
        };

#define MAXSIZE 12

typedef struct{
    int i,j;
    int e;
}Triple;
typedef struct{
    Triple data[MAXSIZE + 1];
    int mu,nu,tu;
}TSMatrix;


TSMatrix convertTSmatrix(int m[4][4], int row, int col )
{
    TSMatrix msmatrix;
    msmatrix.mu = row;
    msmatrix.nu = col;
    Triple triples[MAXSIZE + 1];
    
    int tCount = 0;
    int i, j;
    for (i = 0; i < msmatrix.mu; i++)


    {
        for (j = 0; j < msmatrix.nu; j++)
        {
            if (m[i][j] != 0)
            {
                triples[tCount].i = i;
                triples[tCount].j = j;
                triples[tCount].e = m[i][j];
                tCount++;
            }
        }
    }
    msmatrix.tu = tCount;
memcpy( msmatrix.data, triples, sizeof(Triple)*tCount );
    return msmatrix;
}

int main()
{
    /*
    [0, 0, 2, 0]
    [3, 0, 0, 1]
    [0, 4, 0, 0]
    [8, 0, 0, 0]

    */
    TSMatrix tsMatrix = convertTSmatrix(matrix, 4, 4);
    int a[10];
    printf("maxsize=%i", sizeof(a));
    return 0;
}


[解决办法]
直接把 triples 换成 msmatrix.data.
同时去掉赋值的那句。
[解决办法]
 msmatrix.data = triples;//此处有问题,错误提示说指针不能赋值到数组。

msmatrix.data和triples 都是数组,用数组拷贝的方式进行赋值
memcpy
[解决办法]
引用:
C/C++ code
#include <stdio.h>
#include <stdlib.h>

int matrix[4][4] = {
            {0, 0, 2, 0}
            ,{3, 0, 0, 1}
            ,{0, 4, 0, 0}
            ,{8, 0, 0, 0}
        };

#define MAX……


代码参照这个改下,你的在sizeof这里有错误
msmatrix.mu = sizeof(m) - 1;

sizeof,你可以参考一下这个篇文章
http://wenku.baidu.com/view/b9790697dd88d0d233d46a90.html

热点排行