问一个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
[解决办法]
代码参照这个改下,你的在sizeof这里有错误
msmatrix.mu = sizeof(m) - 1;
sizeof,你可以参考一下这个篇文章
http://wenku.baidu.com/view/b9790697dd88d0d233d46a90.html