【发布时间】:2010-09-22 07:19:46
【问题描述】:
我试图创建一个伪超结构来打印结构数组。我的基本 结构如下。
/* Type 10 Count */
typedef struct _T10CNT
{
int _cnt[20];
} T10CNT;
...
/* Type 20 Count */
typedef struct _T20CNT
{
long _cnt[20];
} T20CNT;
...
我创建了以下结构来打印上述结构的数组。编译下面的代码 sn-p 时出现取消引用 void 指针错误。
typedef struct _CMNCNT
{
long _cnt[3];
} CMNCNT;
static int printCommonStatistics(void *cmncntin, int cmncnt_nelem, int cmncnt_elmsize)
{
int ii;
for(ii=0; ii<cmncnt_nelem; ii++)
{
CMNCNT *cmncnt = (CMNCNT *)&cmncntin[ii*cmncnt_elmsize];
fprintf(stout,"STATISTICS_INP: %d\n",cmncnt->_cnt[0]);
fprintf(stout,"STATISTICS_OUT: %d\n",cmncnt->_cnt[1]);
fprintf(stout,"STATISTICS_ERR: %d\n",cmncnt->_cnt[2]);
}
return SUCCESS;
}
T10CNT struct_array[10];
...
printCommonStatistics(struct_array, NELEM(struct_array), sizeof(struct_array[0]);
...
我的意图是有一个通用的函数来打印所有的数组。请告诉我正确的使用方法。
提前感谢帮助。
编辑:参数名称由 cmncnt 更改为 cmnctin。抱歉,是拼写错误。
谢谢, 马修·李菊
【问题讨论】:
-
你应该只使用联合,它会更简单: typedef union { long cnt_long;诠释cnt_int; } 碳纳米管; CNT 计数[20];
-
请解释一下,你所说的超级结构是什么意思,并检查你发布的示例代码。你真的是说: typedef struct _T10CNT { int _cnt[20]; }
-
超级结构是可以指向具有相似数据类型的相似结构的结构。在上述示例中,TL10CNT、TL20CNT 属于类似类型。我的意图是,为了打印结构,我不需要为每个结构编写函数。相反,我可以使用单个结构指针来获取数据。
-
以 _ 开头并后跟大写字母的符号名称由 C/C++ 标准库的实现保留。你真的应该改变你的命名约定。
-
也许你应该告诉我们你想做什么?尝试在 C 中打印出任何结构是不可能的。这不是 C++
标签: c struct void-pointers