PowerPoint プレゼンテーション

Similar documents
バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

memo

プログラミング及び演習 第1回 講義概容・実行制御

02: 変数と標準入出力

02: 変数と標準入出力

Taro-ポインタ変数Ⅰ(公開版).j

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

gengo1-11

Microsoft PowerPoint - 計算機言語 第7回.ppt

PowerPoint プレゼンテーション

memo

情報処理Ⅰ演習

02: 変数と標準入出力

memo

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft Word - Cプログラミング演習(11)

Prog1_10th

02: 変数と標準入出力

Microsoft PowerPoint - 5Chap15.ppt

PowerPoint プレゼンテーション

Microsoft Word - no202.docx

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

C 資料 電脳梁山泊烏賊塾 構造体 C++ の構造体 初めに 此処では Visual Studio 2017 を起動し 新しいプロジェクトで Visual C++ の Windows デスクトップを選択し Windows コンソールアプリケーションを作成する 定義と変数宣言 C++ に

PowerPoint プレゼンテーション

<4D F736F F D2091E63589F182628CBE8CEA8D758DC08E9197BF2E646F6378>

Microsoft PowerPoint ppt

Microsoft PowerPoint - handout07.ppt [互換モード]

第1回 プログラミング演習3 センサーアプリケーション

Microsoft PowerPoint - lec10.ppt

プログラミングI第10回

Microsoft PowerPoint - 11.pptx

Microsoft Word - 3new.doc

Microsoft Word - Cプログラミング演習(12)

PowerPoint プレゼンテーション

Microsoft PowerPoint - 09.pptx

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

02: 変数と標準入出力

第 3 回 Java 講座 今回の内容 今週の Java 講座はコレクション 拡張 for 文, ガベージコレクションについて扱う. 今週の Java 講座は一番内容が薄いも のになるだろう. コレクション コレクションとは大きさが決まっていない配列だと考えればよい. コレクションには List 先

PowerPoint プレゼンテーション

JavaプログラミングⅠ

演算増幅器

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

program7app.ppt

gengo1-8

C言語講座 ~ファイル入出力編~

02: 変数と標準入出力

02: 変数と標準入出力

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - 6.pptx

02: 変数と標準入出力

PowerPoint Presentation

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

Microsoft Word - C言語研修 C++編 3.doc

Microsoft PowerPoint pptx

Microsoft PowerPoint - prog04.ppt

プログラミング実習I

基礎プログラミング2015

Microsoft Word - Cプログラミング演習(10)

プログラミング実習I

Microsoft PowerPoint - 13.ppt [互換モード]

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

Microsoft PowerPoint pptx[読み取り専用]

Microsoft PowerPoint - 12.ppt [互換モード]

Prog1_6th

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C-programming_kouza4(2007)

ファイル入出力

PowerPoint Template

Microsoft PowerPoint - kougi9.ppt

演算増幅器

Microsoft PowerPoint - 12.ppt [互換モード]

概要 プログラミング論 構造体 構造体 複数の変数を組合わせて, ひとまとめにしたもの 簡単 重要 自己参照型, リスト 重要, 難しい S-1 S-2 新しい構造体の宣言 struct 構造体名 { データ型メ

Microsoft Word - no02.doc

Microsoft Word - no12.doc

Microsoft Word - no11.docx

プログラミングI第6回

プログラミング基礎I(再)

Microsoft PowerPoint - prog03.ppt

プログラミング基礎

02: 変数と標準入出力

ファイル入出力

Microsoft PowerPoint - 11.ppt [互換モード]

プログラミング方法論 II 第 14,15 回 ( 担当 : 鈴木伸夫 ) 問題 17. x 座標と y 座標をメンバに持つ構造体 Point を作成せよ 但し座標 は double 型とする typedef struct{ (a) x; (b) y; } Point; 問題 18. 問題 17 の

6 関数 6-1 関数とは少し長いプログラムを作るようになると 同じ処理を何度も行う場面が出てくる そのたびに処 理を書いていたのでは明らかに無駄であるし プログラム全体の見通しも悪くなる そこで登場す るのが 関数 である 関数を使うことを 関数を呼び出す ともいう どのように使うのか 実際に見て

プログラミング入門1

PowerPoint プレゼンテーション - 物理学情報処理演習

PowerPoint Presentation

Microsoft Word - no15.docx

<4D F736F F D20438CBE8CEA8D758DC F0939A82C282AB2E646F63>

<4D F736F F D20438CBE8CEA8D758DC03389F0939A82C282AB2E646F63>

問 2 ( 型変換 ) 次のプログラムを実行しても正しい結果が得られない 何が間違いかを指摘し 正しく修正せよ ただし int サイズが 2 バイト long サイズが 4 バイトの処理系での演算を仮定する #include <stdio.h> int main( void ) { int a =

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

Microsoft PowerPoint pptx

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

C プログラミング 1( 再 ) 第 4 回 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 1

Microsoft PowerPoint - ca ppt [互換モード]

ゲームエンジンの構成要素

Transcription:

講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1

ポインタ講座 2017/01/06,09 fumi 2

はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3

はじめに みなさん復習はしましたか? 4

& 演算子 & 演算子を使うと 変数のアドレスが得られる 例 :int fumi = 23; printf( %d n, &fumi); // 変数 fumiのアドレスが表示される 5

演習 1- アドレスを表示しよう 自分で変数を作り その中に値を代入 printf でアドレスとその内容を表示 イメージをつかもう 6

演習 1- アドレスを表示しよう ソースコード 実行結果 7

そもそもポインタとは? 8

ポインタとは アドレスを格納できる特殊な変数のこ と 9

メリット 上手く使うと実行速度が向上する メモリ効率が向上する コードの柔軟性が向上する 詳しいことは調べてみよう 10

デメリット 可読性が低くなる 誤った使い方をすると危険である 慣れてないと混乱しやすい 1 つ 1 つ整理すること 11

理解は難しい? 苦手意識を持ったら終わり 他のことと混ざらないように 何が異なるのか? よく考える事 実際は難しくない 12

ポインタのイメージ 変数などのアドレスを保存できる型の こと イメージ int f = 23; Int* u; u = &f; 番地内容 ( 変数名 ) 5022 5023 23 f,*u 5024 5025 5023 u 23 u は f を指している! ポインタみたい! 5026 アドレス 5023 5025 f 5023 u イメージ 13

使い方 (1) 型 * 変数名 または 型 * 変数名 でポ インタ変数として宣言できる 変数名 の状態でアドレスモード * 変数名 の状態で参照モード 後ほど説明するよ! 例 int* fumi; // ポインタ変数の宣言 14

使い方 (2) 必ず NULL で初期化をすること 例 : int *fumi =NULL; C++11 以降は nullptr が追加されている 例 : int *fumi = nullptr; Visual Studioではこちらを推奨します 詳しいことは調べてみよう 15

* について (1) C 言語では * マークは様々な場所で使われる わかりにくくなる原因の 1 つ 3 つ順番に説明するので混乱しないように 1 つ目は? かけ算の * 例 :fumi = 2*3; 乗算演算子という 16

* について (2) 残りの2つが混乱しやすい 2つ目は? ポインタ変数の宣言の時に使われる * 例 : int* fumi; // fumi というポインタ変数を宣言 17

* について (3) 3 つ目は? ポインタ変数の参照の時に使われる * 間接参照演算子という 例 :int fumi = 0; int *sofume = &fumi; // sofumeはfumiを指すポインタ *sofume = 23; // sofume(fumi) に 23 を代入 18

演習 2- ポインタを使う int 型の変数とポインタ変数を定義し ポインタ変数の中に変数のアドレスを入れてみよう ポインタ変数を元にデータを変化させてよう 19

演習 2- ポインタを使う ソースコード 実行結果 20

重要なこと (1) ポインタを使うときは 必ずNULLで初期化すること 初期化なしポインタはどこかを指している 自動的に初期化される場合も ( 環境依存 ) Visual Studioだと? 21

重要なこと (2) 関係のないアドレスの内容を上書きしないように気をつけること 無意識に誤ったアドレスを入れてしまうことがあり得る Visual Studioは検知してくれる ポインタ変数にも型判別がある 22

全てのアドレス プログラムは全てメモリ上にある なら 変数も配列も関数も構造体も全 てメモリ上にある ということはポインタが使えるのでは? 23

配列 (1) 実は配列の変数には 宣言時に確保さ れた領域の先頭のアドレスが入っている 例 :int array[5]; 5 個分の領域が確保される イメージ 番地 内容 ( 変数名 ) 5022 5023 array 5024 5025 5026 5027 5028 24

配列 (2) 領域を5つ確保と言うが 実際は型によって確保される領域の数は変わる 例 :char 1byte, int 4byte, etc サイズは環境依存 講座はこの例に従う 25

配列 (3) 配列のN 番目のデータの場所は変数のアドレス+ 型の大きさ N 例 : array + 4byte 3 // int 型のarray[3] // 合計で12 個の領域が確保される 26

[] 演算子 先頭アドレスから距離を指定 距離は 型の大きさ [] の中の数字 例 : int array[3]; // 4byte * 3 の領域を確保 配列参照演算子という ポインタ演算の簡易表記 27

ポインタは何に使う? ポインタはどこで使うべき? 何のために必要? 例えば 28

配列のメモリ確保 配列は [] 内の数値の分だけメモリを確保してくれた [] の中身は定数でなければならない ( 環境依存 ) 変数を使いたい時や実行まで定まらない時は? 29

メモリの動的確保 malloc という関数を用いると必要な分だけメモリ ( 配列 ) を確保できる malloc 関数 void *malloc(size_t size); // size バイト分のメモリを確保し先頭のアドレスを返す stdlib.h をインクルードする必要がある 確保に失敗すると NULL が返ってくる 30

変数の大きさ 普段の配列 ( 静的確保 ) では [] 演算子がバイト数を計算してくれていた intは4byte? どうやって大きさを判断する? 31

型ごとの大きさを調べる sizeof 演算子 sizeof( 型, 変数等 ) でサイズを調べられる 例 : sizeof (int) // int 型のバイト数が得られる 32

演習 3- 色んな型のサイズ Sizeof 演算子を使って様々な型のサイズ を調べてみよう! char, int, float, double, etc 33

演習 3- 色んな型のサイズ ソースコード 実行結果 34

メモリの動的確保をしてみる sizeの求め方はわかった void *malloc(size_t size); void ポインタ型? 合った型にキャストする必要がある 例 : int *data = (int *) malloc (sizeof(int) * n); 35

メモリの解放 malloc 関数で確保したメモリは free 関数で解放する 解放しないと ずっとメモリに残ったままになる 実行終了時には消えるが 解放することによって無駄なメモリを使わない free( ポインタ変数 ); 例 : free(ptr); 36

演習 4- 配列の動的確保 1~10の好きな数字を入力し その分だけ配列を作る その後順番に数値を入力し 最後に全ての値を表示する 37

時間がある人向け 二次配列を動的確保してみよう ポインタのポインタ 構造体を動的確保してみよう メンバ変数にアクセスするには.( ドット ) 演算子ではなく->( アロー ) 演算子を用いる 38

演習 4- 配列の動的確保 ソースコード 39

関数の返り値 今まで使ってきた関数は 返り値を1つのみしか指定できなかった ポインタを使うといくつも返せる? 今までの関数 int add(int a, int b){ return a+b; } 40

複数の戻り値 ポインタを使うことによって実現できる アドレスを渡せば変数の有効範囲が変わらない void func (int* a, int* b); // ポインタ渡し // intポインタ型が仮引数 // 実引数はアドレス 41

演習 5- 複数の戻り値を扱う int 型の変数を2つ渡すと その内容を入れ替えてくれる関数を作ろう a = 3, b = 5 a = 5, b = 3 さっきの関数を参考にしてみよう 42

演習 5- 複数の戻り値を扱う ソースコード 実行結果 43

配列を引数にする 配列を引数に持った関数を作るには? 変数には配列の先頭のアドレスが入っ ている 44

演習 6- 引数が配列の関数 演習 4を元に 配列の中身の平均値を求め出力する関数を作ろう 書式 void printave(, int size); の部分は自分で考えよう 45

時間がある人向け 二次配列を引数に持つ関数を作ってみよう 構造体を引数に持つ関数を作ってみよう 46

演習 6- 引数が配列の関数 ソースコード 実行結果 47

まとめ C 言語の特徴であるポインタの概念を理解すると様々なことができるようになる マスターすると 速度向上やメモリ節約などにつながる 48

C++ の世界へ この講座ではCを主に扱った より拡張した言語にC++ というものがある C++ は非常に便利 今回の内容を簡単に なおかつスマートに書けるようになる 49

他の言語の世界へ C 言語にはポインタという概念があり 柔軟に扱うことができる これらをあまり扱わずに済む言語もある C#,etc.. それぞれの言語の特徴や利点を調べてみよう 君に合った言語を見つけよう 50

さいごに これだけが全てではない 他にもたくさん ( 時間の都合等 ) const 修飾子を用いると良い C++ だと参照渡しという方法がある Etc.. C# も C++ もオブジェクト指向である ( 参考サイトをぜひ!) 51

やってほしいこと 今まで自分が出た講座をよく復習すること 講座で扱ってないことに挑戦すること 時間ある人向けの問題とか 他にどんなことができるか調べること ヘッダーファイルを使うとどれだけ便利になる? 52

参考サイト ( ポインタ関係 ) http://white-bear.info/archives/583 https://www.sgnet.co.jp/c/6-3.html http://9cguide.appspot.com/15-05.html http://qiita.com/go_astrayer/items/6 afb1592a8a5763fede1 53

参考サイト (C++ 関係 ) http://www.asahi-net.or.jp/~yf8kkbys/newcpp0.html http://www7b.biglobe.ne.jp/~robe/ cpphtml/ 54

参考サイト ( その他 ) https://qiita.com/ http://qiita.com/hirokidaichi/items/5 91ad96ab12938878fe1 http://tdak.hateblo.jp/entry/2014040 6/1396773476 55