C/C++结构体和结构体指针使用之我见

来源:互联网 发布:网络第一辣妈高云 编辑:程序博客网 时间:2024/06/05 10:13

C/C++结构体和结构体指针使用之我见

 

 

       编码过程中,需要用到结构体和结构体的指针,而且同时在CC++的环境下,稍微有点心得,总结如下:

 

一.    基础代码:

有如下的结构体:

//! structruefor all PH_DATA

typedef struct_PH_DATA

{

       INT8U type;//!different type for PH ,fordifferent parameters,such as onepoint ,offsetZ,measurement formula ........

      

       FP32 EVal; //<!< also the meausredmV value,different display

       FP32 E0Val;//!<  offset value

       FP32 sVal; //!< slope value

       FP32 sPVal;//!< slope percent value

       FP32 returnVal;//!< return the value

       INT8U returnStatus;//!< return thestatus

}S_PH_DATA,*Ptr_S_PH_DATA;

 

显而易见, S_PH_DATA是一个结构体,Ptr_S_PH_DATA是一个指向结构体的指针.

 

二.    结构体的使用方法.

据我所知,C++下有三种函数参数使用结构体的方法(其实也就是三种向函数传递数值的方式):按值调用(call-by-value),用引用参数按引用调用(call-by-referencereference argument)和用指针参数按引用调用(call-by-reference pointer argument).而标准C是不支持用引用参数按引用调用的.所以如果cc++混编的情况下,建议使用指针.

三种方法代码分别如下:

1.        按值调用:

int main()

{

       S_PH_DATA testPh;

testPh.EVal = 1.0f;

HandleCmd(testPh);

              printf(testPh.returnValis %f/r/n, testPh.returnVal);

}

 

void HandleCmd(S_PH_DATA inPhData)

{

       inPhData.returnVal = 1.1f;

}

 

运行到printf的时候,会报错,提示testPh未初始化,因为按值调用只是传递了参数的一个复本,所以并不会修改参数的值,其实HandleCmd的计算根本没用.

 

2.        用引用参数按引用调用:

int main()

{

       S_PH_DATA testPh;

testPh.EVal = 1.0f;

HandleCmd(&testPh);

              printf(testPh.returnValis %f/r/n, testPh.returnVal);

}

 

void HandleCmd(S_PH_DATA &inPhData)

{

       inPhData.returnVal = 1.1f;

}

这个编译通过没问题,而且可以打出正确的值.但是,C中会编译不通过,C不支持引用.

 

3.        用指针参数按引用调用:

int main()

{

       S_PH_DATA testPh;

testPh.EVal = 1.0f;

HandleCmd(&testPh); //取得参数地址.

              printf(testPh.returnValis %f/r/n, testPh.returnVal);

}

 

void HandleCmd(Ptr_S_PH_DATA inPhData)

{

       assert(inPhData!=NULL);

       inPhData->returnVal = 1.1f;

}

效果和用引用参数按引用调用一样,cC++都可以这么用的.但是要注意, 通过assert(inPhData!=NULL)来预防指针跑飞.

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 幼儿园报名没进怎么办 考完教师资格证怎么办 两套房改房怎么办 cad打开无响应怎么办 高中生脸上痘痘怎么办 孩子玩心太大怎么办 开会听不懂讲什么怎么办 在国外玩手游老是进不去怎么办 广东普法考试不合格怎么办 尔雅考试错过了怎么办 大四考试错过了怎么办 电大考试错过了怎么办 吃了桂圆咳嗽怎么办 初中生游戏网瘾怎么办 孩子染上网瘾怎么办 郑州孩子厌学有网瘾怎么办 孩子网瘾严重怎么办 学生上课玩手机怎么办 老脱发怎么办才好 好几个月不来月经怎么办 电脑辐射脸上起痘痘怎么办 脸被手机辐射怎么办 宝宝沉迷于电视怎么办 青少年长了白发怎么办 刮胡子刮多了怎么办 孩子就不学习怎么办 长大了内心脆弱怎么办 10岁不想长大怎么办 18青少年血压高怎么办 大学生老是网贷怎么办 网贷报案通告怎么办 担保公司破产了怎么办 抵押车被锁定怎么办 高级营销师取消怎么办 留学生小签过期怎么办 加拿大工签被拒怎么办 在编教师落聘了怎么办 www.osta.org.cn怎么办 幸福蓝海尊享卡过期了怎么办 功率因素为负值怎么办? 镍氢电池过度放电后充不进怎么办