2010年2月19日 星期五

結構與指標副程式

故事情節是這樣的



竟然這是基本功,那麼當然要練一下了


參考網路上的範例


 


自己重新實驗,利用結構指標進副程式,結構出副程式


union f2bbbb


{


        float _;


        struct


        {


                char b1;


                char b2;


                char b3;


                char b4;


        };


};


 


struct ATTITUDE{


        union f2bbbb roll;


        union f2bbbb pitch;


};


 


struct ATTITUDE get_attitude_from_accel(struct ATTITUDE *_att,int ax,int ay,int az)


{



        _att->roll._  += ax;   


        _att->pitch._ += ay;


        return *_att;       


}


int main(void){


struct ATTITUDE _btt;


float k;


_btt=get_attitude_from_accel(&_btt,1,2,3);


k=_btt.pitch._;


k=_btt.roll._;


return 0;


}



嗯,這樣似乎沒有多大的問題


 



再修改一下,利用結構進副程式,結構出副程式


 



union f2bbbb



{


        float _;


        struct


        {


                char b1;


                char b2;


                char b3;


                char b4;


        };


};


 


struct ATTITUDE{


        union f2bbbb roll;


        union f2bbbb pitch;


};


 


struct ATTITUDE get_attitude_from_accel(struct ATTITUDE _att,int ax,int ay,int az)


{


        _att.roll._  += ax;   


        _att.pitch._ += ay;


        return _att;       


}


int main(void){


struct ATTITUDE _btt;


float k;


_btt=get_attitude_from_accel(_btt,1,2,3);


k=_btt.pitch._;


k=_btt.roll._;


return 0;


}


 


 


嗯,這樣似乎沒有多大的問題

 


再修改一下利用結構指標進副程式,結構指標出副程式


union f2bbbb


{


        float _;


        struct


        {


                char b1;


                char b2;


                char b3;


                char b4;


        };


};


struct ATTITUDE{


        union f2bbbb roll;


        union f2bbbb pitch;


};


struct ATTITUDE get_attitude_from_accel(struct ATTITUDE *_att,int ax,int ay,int az)


{


        _att->roll._  += ax;   


        _att->pitch._ += ay;


        return *_att;       


}


int main(void){


struct ATTITUDE *_btt;


float k;


*_btt=get_attitude_from_accel(_btt,1,2,3);


k=_btt->pitch._;


k=_btt->roll._;


return 0;


}


 


問題來了,執行這樣的副程式竟然會出錯!


摸不著頭緒@@


不知道為什麼這樣的指標結溝沒有辦法正常運作


 


原來-> 這個符號不是c++才擁有的@@ 原來c語言就有這個符號了


另外就是


以前以為struct 和union 只能這樣用


原來struct 和union 是可以反過來用@@


這樣的結構方式真的還滿好用的


奇怪@@才剛過完年,我怎麼好像有好多作業喔


呵呵~


不過還滿好玩的就是了


聽說今天只有8度?超級冷的啦!!!!!


實驗室是冰箱吧!!!!!!!!!!


老闆,可以申請暖器機嗎?


哈哈


1 則留言:

  1. 呵...我在robotfun的po文也會被你挖出來...網路真小。

    [版主回覆02/20/2010 09:52:03]你在ptt、microchip我都有看到你的蹤跡喔

    回覆刪除