资讯详情

C语言编程之结构体强制类型转换

2017-04-14 阅读:103 来源:广西南宁达内软件科技有限公司
进入>

南宁达内:C语言编程之结构体强制类型转换

前些天看一款数据库语法解析器的代码,其中的词法分析语法解析阶段,利用一个结构体存储所解析的SQL语句的类型,然后根据这个类型将改结构体强制转换为对应的另一结构体并赋值给他,以便做进一步的执行工作.

举个简单的例子:

存储语法解析后数据的结构体(注意,其只有一个元素)为:

structanalyse

{

inttype;

};

我们约定的不同的type代表不同的SQL操作,假如type=1时表示altertable操作,type=2时表示select操作,type等于3时表示createtable操作等等.那么我们对不同的操作有不同的结构体来存储信息,例如:

structalter

{

inttype;

intnumber;

charsubtype;

......

......

};

structselect

{

inttype;

charrelnum;

longtablenum;

......

......

};

注意到,结构体analyse,alter与select中第一个元素的类型都是一样的,表示的意思也相同,都是代表不同的操作号.现在若判断analyse中的type为1时,就将其强制转换为structalter并赋值给structalter类型的变量;若判断analyse中的type为2时,就将其强制转换为structselect并赋值给structselect类型的变量.

可能有人会问了,为什么程序里要对类型不同的结构体之间强制转换并赋值呢?

问题解析

问题的关键在于,结构体structanalyse中的type存储不同的值时,在紧挨着结构体的内存中按照要强制转换的结构体的元素类型存储了相对应的数据.

例如,当结构体structanalyse中的type为1时,需要在紧挨着结构体structanalyse的高地址区域按照结构体structalter的数据类型存储对应的数据,包括int,char等等.当结构体structanalyse中的type为2时,需要在紧挨着结构体structanalyse的高地址区域按照结构体structselect的数据类型存储对应的数据,包括char,long等.

这样,在进行强制转换时,结构体structanalyse与结构体structanalyse中除了inttype以外的那些元素就可以得到相对应的值了.

简单的小例子

下面是一个简单的小例子,说明了该强制转换的问题:

structA{

intnum;

};

structB{

intnum;

chartype;

intage;

};

intmain()

{

structAa;

a.num=1;

char*tmp1=(char*)(&(a.num));

tmp1=tmp1+4;

*tmp1='a';

int*tmp2=(int*)(&(a.num));

tmp2=tmp2+2;

*tmp2=100;

structB*b=(structB*)(&a);

printf(“b->num=%db->type=%cb->age=%d\n”,b->num,b->type,b->age);

}

加载全文

免责声明:本站部分内容、图片来自用户自主上传,如果您对本站信息资源版权的归属问题存有异议,请您致信,我们会立即做出答复并及时解决。如果您认为本站有侵犯您权益的行为,请通知我们,我们一定根据实际情况及时处理。

以上是广西南宁达内软件科技有限公司为大家整理的有关C语言编程之结构体强制类型转换的全部内容,更多精彩请访问学习资讯新闻专栏。
下一篇: 达内就业快讯

相关课程

更多>
2020猎学网广告栏
申请课程免费试听名额

课程顾问24小时内联系您

你好

顾问将于24小时内联系您!

确定
在线咨询 微信咨询 立即报名
申请1对1课程顾问咨询服务
×
你好

顾问将于24小时内联系您!

确定
南宁猎学网 >广西南宁达内软件科技有限公司 >C语言编程之结构体强制类型转换