关于struct使用的问题,迷惑中。。。

yaodi_1985_84 2008-12-19 06:15:57
今天看代码发现一段与下面类似的代码::

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "class.h"



#define TC_FILDES()
typedef struct
{
TC_FILDES()
}TC;

typedef struct
{
TC *tc;
int a;

}
USE;
typedef struct
{
int x;
int y;

}LOCATION;

void func(TC *);
void main()
{
LOCATION loc;
USE use;

loc.x = 1;
loc.y = 1;

use.tc = (TC *)&loc;

func(use.tc);


}

void func(TC *tc )
{
LOCATION *pLoc;
pLoc = (LOCATION *)tc;

//Operation with pLoc
pLoc->x;
pLoc->y;

}

我有几个问题:
1.TC结构为什么这么写,里面什么都不写也可以啊!!
2.TC结构有什么用,其实在USE结构中定义了一个TC类型的指针,实际上我觉得这个类型用char等等都可以,为什么要定义这个TC,或者我也可以直接用它所指向的类型定义,也就是LOCATION;为什么非要用TC这个让我迷惑的结构,是出于什么目的呢?
3.在主函数的调用问题,有一个调用函数func,并且向它传递一个参数,为什么这么写,在这个函数中还要把类型再转换回来使用,这又是出于什么考虑。
是为了防止结构嵌套,程序比较清晰吗?还是另有企图。
帮忙分析分析,谢谢啦!
...全文
274 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzzlll1983 2008-12-21
  • 打赏
  • 举报
回复
学习
yaodi_1985_84 2008-12-21
  • 打赏
  • 举报
回复
至于问题的重点,我在发帖时已经提的很清楚了,当然不是在基本语法上了,难道我练强制转换还不知道吗?哈哈
我只是对他们这种使用形式感觉很新奇,想问问高手这种方式到底出于什么考虑。还要说的是我在这个USE结构中有个INT A;的定义,原来这里定义的是一个函数指针,后来所使用的都是回调函数,希望大家继续帮忙啊,还要谢谢大家哦!
yaodi_1985_84 2008-12-21
  • 打赏
  • 举报
回复
我做下解释,这个是纯C语言的东西,不涉及C++,这段代码不是我看到的那段代码,我只是按照那段代码的形式构造了一个简单的,便于大家理解。那个class.h是我之前留下的东西,与这个代码完全没有关系。这个函数也没任何实质功能,只是向大家表示一下这个调用关系,以及转换关系。
这段代码是INTEL的开源计算机视觉库里的一段常用的代码形式,也就是OpenCV中的。
bxk253387223 2008-12-21
  • 打赏
  • 举报
回复
这样写纯粹是为了可以扩充自己的代码,TC结构体中可以通过前面定义的宏随意扩充,然后用下面的方式调用.
在做项目的时候就会经常碰到了,自己不可能想的十全十美,后来人会在你的基础上进行改进,增加功能,如果你已开始就写死了,固定是一个char型的指针,别人想增加你的功能也不可能了,这就是为什么有的项目到后期就是即使发现了问题也无法解决的原因。
blh 2008-12-20
  • 打赏
  • 举报
回复
我看这个程序就是一个结构体指针强制转换的一个例子而已
mynameisslim 2008-12-20
  • 打赏
  • 举报
回复
学习
funnybunny 2008-12-20
  • 打赏
  • 举报
回复
楼主的重点应该不是在结构体上,而是宏定义的那部分...

饿~我也不懂~学习~
太乙 2008-12-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nicholas100 的回复:]
学习
[/Quote]

hehe
nicholas100 2008-12-20
  • 打赏
  • 举报
回复
学习
lufei145 2008-12-20
  • 打赏
  • 举报
回复
mark
C821215 2008-12-19
  • 打赏
  • 举报
回复
个人看法:

class.h <-- 应该是以C 摸拟类对象的头文件吗?

1. TC 当然要那样写,为了以后添加什么字段方便啊. 空结构的确可以.推测TC是一个类似于JAVA中的OBJECT的根类模拟结构.即所有对象体的父类.
2. USE 结构体可能是一个对象容器吧. 一边用一个泛用型的TC指向一个结构体对象,一边用个int a用来说什么的吧.
3. 为了通用啊,就像是JAVA中你可以用Object来得到任何一个类一样的理道.

总的来说,用C来这样摸拟类对象,完全是自找苦吃.....看的人不明白..交流起来非常麻烦.
sagegz 2008-12-19
  • 打赏
  • 举报
回复
看完之后,云里雾里的...
你那class.h里面是什么?
这个函数的功能又是什么?

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
//#include "class.h" //你这class头文件里是什么?

#define TC_FILDES()

typedef struct{
TC_FILDES() //这里是上面定义的宏 #define TC_FILDES()见上面代码
}TC;

typedef struct{
TC *tc;
int a;
}USE;
typedef struct{
int x;
int y;
}LOCATION;

void func(TC *);

void main(){
LOCATION loc;
USE use;
loc.x = 1;
loc.y = 1;
use.tc = (TC *)&loc;
func(use.tc);
}

void func(TC *tc ){
LOCATION *pLoc;
pLoc = (LOCATION *)tc;
//Operation with pLoc
pLoc->x;
pLoc->y;
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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