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

ソーラー

「構造体の場合もあっさり完了


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



今度は


main関数内で定義された構造体の配列 


に格納されている数値を


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


これは  どうなるのかな」



アレサ「これも とっても簡単な予感がします。


次のプログラムのように


立方体cube1のデータ


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

縦の長さ 4.0

横の長さ 5.0

高さ 6.0



立方体cube2のデータ


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

縦の長さ 6.0

横の長さ 7.0

高さ 8.0



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


#include <stdio.h>


typedef struct Cube{


int no;

float tate;

float yoko;

float takasa;

}Cube;


int main(void){


Cube str[2];

str[0].no=1;

str[0].tate=4.0;

str[0].yoko=5.0;

str[0].takasa=6.0;

str[1].no=2;

str[1].tate=6.0;

str[1].yoko=7.0;

str[1].takasa=8.0;

/* strの構造体Cube型の配列宣言、初期化が行われています*/


printf ("%d\n",str[0].no);

printf ("%f\n",str[0].tate);

printf ("%f\n",str[0].yoko);

printf ("%f\n",str[0].takasa);

printf ("%d\n",str[1].no);

printf ("%f\n",str[1].tate);

printf ("%f\n",str[1].yoko);

printf ("%f\n",str[1].takasa);


return 0;

}

コンパイル結果

1

4.000000

5.000000

6.000000

2

6.000000

7.000000

8.000000


ソーラー「このとき これまた


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


と定義して


main関数内で作成された


構造体の配列strの中に生成された

配列変数


str[0].no=1;

str[0].tate=4.0;

str[0].yoko=5.0;

str[0].takasa=6.0;


str[1].no=2;

str[1].tate=6.0;

str[1].yoko=7.0;

str[1].takasa=8.0;


str[0].no=1;

str[0].tate=4.0;

str[0].yoko=5.0;

str[0].takasa=6.0;


str[1].no=2;

str[1].tate=6.0;

str[1].yoko=7.0;

str[1].takasa=8.0;


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


マクロの定義

#define f(a) a+1


を使い



str[0].no=2;

str[0].tate=5.0;

str[0].yoko=6.0;

str[0].takasa=7.0;


str[1].no=3;

str[1].tate=7.0;

str[1].yoko=8.0;

str[1].takasa=9.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 str[2];

str[0].no=1;

str[0].tate=4.0;

str[0].yoko=5.0;

str[0].takasa=6.0;

str[1].no=2;

str[1].tate=6.0;

str[1].yoko=7.0;

str[1].takasa=8.0;


f(str[0].no);

f(str[0].tate);

f(str[0].yoko);

f(str[0].takasa);

f(str[1].no);

f(str[1].yoko);

f(str[1].tate);

f(str[1].takasa);


printf ("%d\n",str[0].no);

printf ("%f\n",str[0].tate);

printf ("%f\n",str[0].yoko);

printf ("%f\n",str[0].takasa);

printf ("%d\n",str[1].no);

printf ("%f\n",str[1].tate);

printf ("%f\n",str[1].yoko);

printf ("%f\n",str[1].takasa);


return 0;

}


コンパイル結果

2

5.000000

6.000000

7.000000

3

7.000000

8.000000

9.000000

アレサ「これまた 簡単に


main関数内で作成された


構造体1の配列に格納されている数値を


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


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


ソーラー「奥様も安心ってわけだね」


ソーラー「

マクロの定義が

#define f(a) a=a+1

となっているので


f(str[0].no);

f(str[0].tate);

f(str[0].yoko);

f(str[0].takasa);

f(str[1].no);

f(str[1].yoko);

f(str[1].tate);

f(str[1].takasa);

str[0].no=str[0].no+1;

str[0].tate=str[0].tate+1;

str[0].yoko=str[0].yoko+1;

str[0].takasa=str[0].takasa+1;

str[1].no=str[1].no+1;

str[1].yoko=str[1].yoko+1;

str[1].tate=str[1].tate+1;

str[1].takasa=str[1].takasa+1;


とみなされるので


printf ("%d\n",str[0].no);

printf ("%f\n",str[0].tate);

printf ("%f\n",str[0].yoko);

printf ("%f\n",str[0].takasa);

printf ("%d\n",str[1].no);

printf ("%f\n",str[1].tate);

printf ("%f\n",str[1].yoko);

printf ("%f\n",str[1].takasa);

printf ("%d\n",str[0].no+1);

printf ("%f\n",str[0].tate+1);

printf ("%f\n",str[0].yoko+1);

printf ("%f\n",str[0].takasa+1);

printf ("%d\n",str[1].no+1);

printf ("%f\n",str[1].tate+1);

printf ("%f\n",str[1].yoko+1);

printf ("%f\n",str[1].takasa+1);


に等しくなります。


このとき


str[0].no

str[0].tate

str[0].yoko

str[0].takasa

str[1].no

str[1].tate

str[1].yoko

str[1].takasa

には

1

4.000000

5.000000

6.000000

2

6.000000

7.000000

8.000000

格納されているので


printf ("%d\n",str[0].no+1);

printf ("%f\n",str[0].tate+1);

printf ("%f\n",str[0].yoko+1);

printf ("%f\n",str[0].takasa+1);

printf ("%d\n",str[1].no+1);

printf ("%f\n",str[1].tate+1);

printf ("%f\n",str[1].yoko+1);

printf ("%f\n",str[1].takasa+1);

コンパイル結果は

2

5.000000

6.000000

7.000000

3

7.000000

8.000000

9.000000

なるんだね。」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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