プログラミング 3 構造体(2).

Slides:



Advertisements
Similar presentations
構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
Advertisements

プログラミング入門2 芝浦工業大学情報工学科青木 義満 第11回構造体. プログラミング入門2 2 構造体 5 人分のサッカー選手データ 全てのデータを関数に渡して,処理する場合 char name[5][256]; int assist[5]; int score[5]; void func( char.
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
アルゴリズムとデータ構造 第2回 線形リスト(復習).
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
第13回構造体.
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
C言語講座 第4回 ポインタ.
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 プログラミング入門2 芝浦工業大学情報工学科 青木 義満
構造体 構造体, 構造体とポインタの組み合わせ,.
プログラミング 3 構造体(1).
プログラミング論 関数ポインタ と 応用(qsort)
プログラミング2 関数
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
関数と配列とポインタ 1次元配列 2次元配列 配列を使って結果を返す 演習問題
ローカル変数とグローバル変数 ローカル変数  定義された関数内だけで使用できる変数 グローバル変数 プログラム全体で使用できる変数.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
ネットワークプログラミング 第3回「C言語の基礎~コマンドライン引数・構造体・ポインタ」
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
第11回 プログラミングⅡ 第11回
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
型の compatibility とポインタ演算
情報処理Ⅱ 第2回:2003年10月14日(火).
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング言語論 第六回 理工学部 情報システム工学科 新田直也.
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
構造体と共用体.
プログラミング 3 2 次元配列.
プログラミング言語論 第十一回 理工学部 情報システム工学科 新田直也.
オブジェクト指向言語論 第三回 知能情報学部 新田直也.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
ネットワーク・プログラミング Cプログラミングの基礎.
高度プログラミング演習 (11).
11: 動的メモリ確保 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
プログラミング論 構造体
情報処理Ⅱ 2005年10月28日(金).
プログラミング 4 文字列.
岩村雅一 知能情報工学演習I 第8回(C言語第2回) 岩村雅一
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング演習II 2004年11月 2日(第3回) 理学部数学科・木村巌.
マスク合成(のような処理) 出力画像 Out 入力画像1 In1 In1 In2 Out 入力画像2 In
左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]
C言語講座第5回 2017 構造体.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
プログラミング 2 静的変数.
Presentation transcript:

プログラミング 3 構造体(2)

構造体のアドレス(1) 本日の例は struct frac { int numr, dnom; }; typedef struct frac Frac; と定義された構造体(分数を想定)で考える 構造体(全体)のアドレスを得ることができる Frac f; について, &f 構造体のメンバのアドレスは「&f.numr」「&f.dnom」のよ うに得られる(&(f.numr))

構造体のアドレス(2) 2 つの構造体の内容を交換 void swap(Frac *f1, Frac *f2) { Frac tmp; tmp = *f1; *f1 = *f2; *f2 = tmp; return; } 構造体は = 演算子ですべてのメンバをコピーできることに 注意 構造体へのポインタも,通常の変数へのポインタと同じよう に作れる

構造体のアドレス(3) 小数に直す(渡されたアドレスで処理) double val(Frac *f) { return (double)(*f).numr / (*f).dnom; } 「f の指す先の numr メンバ」(. 演算子のほうが * 演算子 より優先順位が高い) 「○の指す先の△メンバ」は -> 演算子で表せる(こ ちらのほうが一般的) double val(Frac *f) { return (double)f->numr / f->dnom; }

構造体のアドレス(4) C 言語の関数呼び出し:値で呼び出し 関数には実引数のコピーが渡る 構造体の場合も例外ではない →サイズの大きな構造体は受け渡しにコストがかかる →構造体は特に必要がない限りアドレスを渡すことが好まれ る

構造体のアドレスと配列(1) 構造体の配列も通常の配列と同じようにアドレス計算 ができる Frac f[10]; のとき, f[0].numr と (*f).numr と f->numr f[1].numr と (*(f + 1)).numr と (f + 1)->numr f[n].numr と (*(f + n)).numr と (f + n)->numr はそれぞれ同じ

構造体のアドレスと配列(2) 構造体の配列を受け取る関数も作れる 通常の配列の場合と同じ(実際には構造体のアドレスを受け 取る) void value(double x[], Frac f[], int n) { int i; for (i = 0; i < n; i++) { x[i] = (double)f[i].numr / f[i].dnom; } return; } void value(double *x, Frac *f, int n) という書き方に読み替えられる ことを復習