读书人

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

发布时间: 2013-01-01 14:04:18 作者: rapoo

问一个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

读书人网 >C++

热点推荐