Project_OKI’s diary

エンジニアの勉強ブログ

C言語基礎知識17(構造体とポインタとアロー演算子の使い方) 

構造体とポインタとアロー演算子について

1.目的

  • アロー演算子について理解する。
  • アロー演算子の使い方について理解する。

目次

2.アロー演算子とは

 ・ポインタが指す構造体(クラス)のメンバへアクセスするために使用する演算子

 

 よく使う使い方:

 ・参照渡しで、構造体を関数に渡し、その構造体にアクセスするのに使用する。

 

3.使い方

 構造体のポインタ ->  メンバ名;    

 

4.プログラムの作成(ポインタの宣言と入力)

//ヘッダファイルのインクルード
#include <stdio.h>

//構造体の作成
typedef struct{
    int storenum;
    int beside;
}Square;

//プロトタイプ宣言
void setNum1(Square squ);
void setNum2(Square *squ);

int main(void){
    //構造体の変数定義
    Square squ;
    //値の入力
    squ.storenum    = 10;
    squ.beside      = 10;
    
    //setNum1の実行
    setNum1(squ); 
    printf("storenum = %d\n", squ.storenum);
    printf("beside = %d\n", squ.beside);
    
    //setNum2の実行
    setNum2(&squ);   //a = squ.storenumに上書き
    printf("storenum = %d\n", squ.storenum);
    printf("beside = %d\n", squ.beside);
    
    return 0;
}

//構造体に構造体を渡して、計算
void setNum1(Square squ){
    squ.storenum    = 200;
    squ.beside      = 200;
}

//構造体に構造体のポインタを渡して計算
void setNum2(Square *squ){
    squ->storenum   = 500;
    squ->beside     = 500;
}

結果:https://paiza.io/projects/yz48Z8rOqUq83YllXCR1IQ?language=c

 

5.プログラムの説明

 ・setNumは、通常の引数で渡し、setNum2はポインタで引数を渡している。

 ・setNumでは、mainでSquareのメンバ変数の値は変更されないが、

  setNum2では、mainでSquareのメンバ変数の値が変更される。

 ・これは、通常の変数と同じ動きとなっている。

 

関連記事

過去の記事:

知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary

C言語基礎知識6(関数) - Project_OKI’s diary

C言語基礎知識7(構造体1) - Project_OKI’s diary

C言語基礎知識8(enum:列挙型) - Project_OKI’s diary

C言語基礎知識9(typedef) - Project_OKI’s diary

C言語基礎知識10(extern宣言) - Project_OKI’s diary

C言語基礎知識11(#define) - Project_OKI’s diary

 

組み込みC言語