マクロで定義された自作関数を使って お手軽に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
となります。」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます