1. 程式人生 > >C語言:結構體中(.)和(->)的區別

C語言:結構體中(.)和(->)的區別



一直以為這兩個是沒有什麼區別的,可以相互替換,今天又翻了一下《C語言核心技術》,明白了其中的奧妙。

相同點:兩個都是二元操作符,其右操作符是成員的名稱。

不同點:點操作符左邊的運算元是一個“結果為結構”的表示式;

                箭頭操作符左邊的運算元是一個指向結構的指標。

舉例說明:

#include <string.h>

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;

 ...

}