问一个typeof结构的问题。。

lingyue1012 2012-10-30 09:23:53
这是一个稀疏矩阵转换存储方式的问题。

代码是这样的:

#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;
}


新手求教!

...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingyue1012 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:

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这里有错……
[/Quote]

谢谢提醒。。。
swordtan 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

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……
[/Quote]

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

sizeof,你可以参考一下这个篇文章
http://wenku.baidu.com/view/b9790697dd88d0d233d46a90.html
十八道胡同 2012-10-30
  • 打赏
  • 举报
回复
msmatrix.data = triples;//此处有问题,错误提示说指针不能赋值到数组。

msmatrix.data和triples 都是数组,用数组拷贝的方式进行赋值
memcpy
Saleayas 2012-10-30
  • 打赏
  • 举报
回复
直接把 triples 换成 msmatrix.data.
同时去掉赋值的那句。
zjs100901 2012-10-30
  • 打赏
  • 举报
回复
#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;
}
buyong 2012-10-30
  • 打赏
  • 举报
回复
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);

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧