型の compatibility とポインタ演算

Slides:



Advertisements
Similar presentations
プログラミング演習Ⅱ 課題 4 第 2 週 画像ファイル (ppm) の読み書き 画像データ用のメモリ確保・解放 1.
Advertisements

構造体 構造体とは? 複数のデータをパックしたもの。 新しい “ 型 “ として使用できる. 構造体 キーワード struct strcut は構造体を宣言する命令。 struct { double x,y; }a,b,c; ↑ ここまでが宣 言 ← この形式で、構造体 a,b,c, を定 義.
C 言語講座第 5 回 構造体. 構造体とは ... 異なる型の値をまとめて新しい型とする 機能がある . つまり , 複数の変数を 1 つのまとまりにできる . 配列と違って同じ型でデータをまとめるのではな く違った型のデータをまとめられる .
1 全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える 処理後のデータを出力ファイルに書き出す 画像データ用に確保したメモリを解放.
情報処理Ⅱ 第8回 2004 年 11 月 30 日(火). 2 本日学ぶこと 関数と変数 目的  関数を自分で定義し,変数の利用方法・範囲を明示的に制 限することで,適切な機能分割(モジュール化,再利用) を図る. してはいけないこと  main 関数のみで 100 行以上のプログラム  グローバル変数を駆使するプログラム.
情報処理Ⅱ 第7回:2003年12月2日(火). 問題(授業がつまらない人のため に) ぷよ連結問題 前提 : フィールドを2次元 配列で定義し,各マスの 「ぷよ」を int 型の値で表現 する. ある地点を入力に取り,そ れと連結する「ぷよ」の個 数を求めよ. 消去できる「ぷよ」 (N 個以上 連結するぷよと,それに隣接する特.
【事例演習5】  字句解析     解 説  “ハッシュを用いた字句解析の方法”.
アルゴリズムとデータ構造 第2回 線形リスト(復習).
5.データ構造入門 5-1.連結リスト(Linked List) 5-2.スタック(Stack) 5-3.キュー(Queue)
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 ポインタについて補足 構造体 第11回 芝浦工業大学情報工学科 青木 義満、篠埜 功
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
プログラミング演習Ⅱ 第12回 文字列とポインタ(1)
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
情報処理Ⅱ 2007年12月10日(月).
アルゴリズムとデータ構造 第2回 線形リスト(復習その2).
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
画像ファイル(ppm)の読み書き 画像データ用のメモリ確保・解放
プログラミング 3 構造体(1).
プログラミング論 関数ポインタ と 応用(qsort)
情報処理Ⅱ 第2回 2007年10月15日(月).
東京工科大学 コンピュータサイエンス学部 亀田弘之
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング演習I 2003年6月25日(第10回) 木村巌.
アルゴリズムとデータ構造 補足資料5-2 「サンプルプログラムsetop.c」
プログラミング 3 構造体(2).
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第11回 プログラミングⅡ 第11回
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
一時的な型 長谷川啓
フロントエンドとバックエンドのインターフェース
記号表の検索と登録 長谷川啓
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
構造体と共用体.
6.データ構造入門 6-1.連結リスト(Linked List) 6-2.スタック(Stack) 6-3.キュー(Queue)
プログラミング言語入門 2013 (C言語 初級) 演習期間 担当 参考資料 採点 10/24 - 1/23 (全10回) 松澤,鈴木,児玉
アルゴリズムとプログラミング (Algorithms and Programming)
C++ 構文解析 構文解析器の状態保存と復元
プログラミング 3 2 次元配列.
情報処理Ⅱ 2006年12月15日(金).
プログラミング論 ポインタ
情報処理Ⅱ 第2回 2005年10月14日(金).
情報処理Ⅱ 第2回 2006年10月13日(金).
アルゴリズムとデータ構造1 2009年6月15日
プログラミング入門 第12回 情報工学科 篠埜 功.
ドキュメントジェネレータ 詳細仕様 長谷川啓
extern の意味 (C プログラミング演習,Visual Studio 2019 対応)
オブジェクト指向言語論 第九回 知能情報学部 新田直也.
X64 函数呼び出し規約 長谷川啓
アルゴリズムとデータ構造 2010年6月17日
フレンド関数とフレンド演算子.
全体の流れ 画像ファイルを開き,画像データをメモリ上にロード メモリ上にロードした画像データに処理を加える
:: の扱い 長谷川啓.
情報処理Ⅱ 第2回 2004年10月12日(火).
ドキュメントジェネレータ doclink 設計メモ
プログラミング演習II 2003年12月10日(第7回) 木村巌.
プログラミング基礎a 第5回 C言語によるプログラミング入門 配列と文字列
マスク合成(のような処理) 出力画像 Out 入力画像1 In1 In1 In2 Out 入力画像2 In
左右反転と180度回転 [0][xsize – 1] [0][0] → i ↓ j [ysize – 1][xsize – 1]
情報処理Ⅱ 小テスト 2005年2月1日(火).
値渡しと参照渡しについて.
C言語講座第5回 2017 構造体.
デフォルト引数 長谷川啓.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
Presentation transcript:

型の compatibility とポインタ演算 長谷川啓 2018.10.11

型の compatibility 厳密な定義は、規格を参考にしてください。ざっくりというと ⇔ 型 T1 と型 T2 が compatible ⇔ extern T1 x; extern T2 x; がエラーではない。

配列の compatibility typedef int T1[]; typedef int T2[10]; extern T1 x; はエラーではないので、 型 int [] と型 int [10] は compatible

関数の compatibility typedef void T1(int (*)(int), double (*)[]); typedef void T2(int (*)(), double (*)[2]); typedef void T3(); extern T1 x; extern T2 x; extern T3 x; はエラーではないので 型 void (int (*)(int), double (*)[])、型 void (int (*)(), double (*)[2]) 、型 void () は互いに compatible

タグ型の compatibility struct S; extern struct S x; // 不完全型 struct S { int a; }; extern struct S x; // 完全型 はエラーではないので 不完全型 struct S と完全型 struct S は compatible

ポインタの compatibility 型 T1 と型 T2 が compatible ⇔ extern T1 *x; がエラーではない。

ポインタ演算の大原則 2 つのポインタの指す型 T1, T2 から型修飾子を取り去った型 T’1, T’2 が compatible である場合、同一のビット表現とアラインメントをもつ。 int* p と const int* q とでビット表現、アラインメントが同じでなくてはならないということ。 だから、int* p と const int* q とで比較、代入等が成立する。ただし p = q は修飾子の意味でエラー。 int** p2 と const int** q2 に対して演算は定義されていない、すなわちエラーである。 T1 は int*, T2 は const int* で、 T’1, T’2 はそれぞれ T1, T2 と同じだが、int* と const int* は compatible ではないから。

ポインタ間の演算 ~ 大原則が適用される p – q p < q, p > q, p <= q, p >= q void* や 0 との比較もできる expr ? p : q void* や 0 でも OK p = q