close








一直以为这两个是没有什么区别的,可以相互替换,今天又翻了一下《C语言核心技术》,明白了其中的奥妙。



 

相同点:两个都是二元操作符,其右操作符是成员的名称。



不同点:点操作符左边的操作数是一个“结果为结构”的表达式;



     
     
    箭头操作符左边的操作数是一个指向结构的指针。



 



举例说明:



#include



 



Song_t  song1,song2,  
     
     
     
   //两个Song_t类型的对象



     
     
    *pSong = &song1;
     
     
 //和一个指向Song_t的指针



 



strcpy(song1.composer,"Ottma Liebert");



song1.duration = 251;



song1.published.year = 1998;



if((*pSong).duration >180)



   
 printf("The song is more than 3 mimutes
long.\n");



 



--最后一句也可以改写为:



if(pSong->duration > 180) ....



 



 




另外一点体会:如果一个函数的传入参数是结构体,且需要该结构体作为返回值的时候,必须采用指针传递的方式,其中对结构体赋值必须使用箭头运算符。



int  iSetValue(Song_t *pSong)



{



  strcpy( pSong ->composer,"123");



  pSong->duration = 251;



 ...



}

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 lsx121924 的頭像
    lsx121924

    lsx121924的部落格

    lsx121924 發表在 痞客邦 留言(0) 人氣()