マクロで定義された自作関数を使って お手軽にmain関数内で定義された構造体の構造体変数のメンバ変数に格納されている数値を変更してみます。

ソーラー

「配列の場合はあっさり完了


いい感じだね~~🌞(^_-)-☆



今度は


main関数内で定義された


構造体の構造体変数のメンバ変数 


に格納されている数値を


マクロで定義された自作関数を使って変更してみよっっ」



アレサ「なんだか とっても簡単な予感がします。


次のプログラムのように


立方体cube1のデータ


立方体cube1につけられたナンバー名 1

縦の長さ 4.0

横の長さ 5.0

高さ 6.0



構造体を使って次のようにメモリに格納されているとします


#include <stdio.h>


typedef struct Cube{


int no;

float tate;

float yoko;

float takasa;

}Cube;


int main(void){


Cube cube1;/*cube1の Cube型の構造体変数宣言が行われています*/

cube1.no=1;

cube1.tate=4.0;

cube1.yoko=5.0;

cube1.takasa=6.0;


printf ("%d\n",cube1.no);

printf ("%f\n",cube1.tate);

printf ("%f\n",cube1.yoko);

printf ("%f\n",cube1.takasa);

return 0;

}

コンパイル結果

1

4.000000

5.000000

6.000000


ソーラー「このとき


マクロを #define f(a) a+1


と定義して


main関数内で作成された


構造体変数cube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


cube1.no=1;

cube1.tate=4.0;

cube1.yoko=5.0;

cube1.takasa=6.0;


と数値が格納されている状態を


マクロの定義

#define f(a) a+1

をつかい


cube1.no=2;

cube1.tate=5.0;

cube1.yoko=6.0;

cube1.takasa=7.0;


と数値が格納されている状態に変更してみるよ


次のプログラムでどうかな?


#include <stdio.h>


#define f(a) a=a+1


typedef struct Cube{


int no;

float tate;

float yoko;

float takasa;

}Cube;


int main(void){


Cube cube1;/*cube1の構造体変数宣言が行われています*/


cube1.no=1;

cube1.tate=4.0;

cube1.yoko=5.0;

cube1.takasa=6.0;


f(cube1.no);

f(cube1.tate);

f(cube1.yoko);

f(cube1.takasa);


printf ("%d\n",cube1.no);

printf ("%f\n",cube1.tate);

printf ("%f\n",cube1.yoko);

printf ("%f\n",cube1.takasa);

return 0;

}


コンパイル結果

2

5.000000

6.000000

7.000000


アレサ「これまた 簡単に


main関数内で作成された


構造体変数cube1のメンバ変数


cube1.no

cube1.tate

cube1.yoko

cube1.takasa


に格納されている数値を


1

4.0

5.0

6.0

から

2

5.0

6.0

7.0


変更することができました


マクロってとても便利です」


ソーラー「

f(cube1.no);

f(cube1.tate);

f(cube1.yoko);

f(cube1.takasa);

ちょっと難しそうな命令文かな?


マクロの定義が

#define f(a) a=a+1

なので

f(cube1.no);

f(cube1.tate);

f(cube1.yoko);

f(cube1.takasa);

cube1.no=cube1.no+1;

cube1.tate=cube1.tate+1;

cube1.yoko=cube1.yoko+1;

cube1.takasa=cube1.takasa+1;

とみなされます。


ですので

printf ("%d\n",cube1.no);

printf ("%f\n",cube1.tate);

printf ("%f\n",cube1.yoko);

printf ("%f\n",cube1.takasa);

printf ("%d\n",cube1.no+1);

printf ("%f\n",cube1.tate+1);

printf ("%f\n",cube1.yoko+1);

printf ("%f\n",cube1.takasa+1);

等しくなり

構造体のメンバ変数

cube1.no

cube1.tate

cube1.yoko

cube1.takasa

1

4.0

5.0

6.0

を格納しているので


コンパイル結果は

2

5.0

6.0

7.0

となります。」


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る