ポインタとポインタを用いた関数定義.

Slides:



Advertisements
Similar presentations
1 B10 CPU を作る 1 日目 解説 TA 高田正法
Advertisements

メモリとポインタ. プログラムの前提 コンピュータは、0と1で計算をし、 0と1でデータを保存している。 メモリを学ぶのに必要な知識である。
C 言語講座 第 7 回 ポインター. メモリとアドレス(ポインターの前 に) コンピュータのメモリには 1 バイトずつ 0 番地、 1 番地、 2 番地・・・というように 住所が割り当てられている この住所をアドレスという。 メモリはデータをしまうもので それを引き出すためには メモリに番号(アドレス)を振っておけばよいな.
2.5 プログラムの構成要素 (1)文字セット ① ASCII ( American Standard Code for Interchange ) JIS コードと同じ ② EBCDIC ( Extended Binary Coded Decimal for Information Code ) 1.
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
ファーストイヤー・セミナーⅡ 第8回 データの入力.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
情報処理Ⅱ 2005年12月9日(金).
C言語講座 第4回 ポインタ.
第8回 プログラミングⅡ 第8回
構造体.
プログラミング演習II 2004年12月 21日(第8回) 理学部数学科・木村巌.
配列の扱い、探索 有効範囲と記憶域期間 第12回 [7月10日、H.15(‘03)] 今日のメニュー 1 前回の課題の復習
プログラミング演習Ⅰ 課題2 10進数と2進数 2回目.
ファイル操作と文字列の利用.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
プログラミング 3 構造体(1).
第10回 プログラミングⅡ 第10回
C言語講座 第3回 ポインタ、配列.
関数とポインタ 値呼び出しと参照呼び出し swapのいろいろ 関数引数 数値積分
関数の定義.
プログラミング 4 記憶の割り付け.
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
プログラミング演習I 2003年5月7日(第4回) 木村巌.
プログラミング入門2 第8回 ポインタ 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
復習 前回の関数のまとめ(1) 関数はmain()関数または他の関数から呼び出されて実行される.
プログラミング言語論 第五回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第11回 プログラミングⅡ 第11回
P n ポインタの基礎 5 q m 5 7 int* p; int 型の変数を指すポインタ int* q; int 型の変数を指すポインタ int n=5, m=7; int 型の変数 int array[3]; int* pArray[3]; p = &n; ポインタにアドレスを代入しているのでOK.
プログラミング演習I 2004年5月19日(第5回) 理学部数学科・木村巌.
メモリとメモリアドレス, ポインタ変数,関数へのポインタ渡し
構造体と共用体.
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
データ構造とアルゴリズム 第11回 リスト構造(1)
プログラミング入門2 第9回 ポインタ 情報工学科 篠埜 功.
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング 3 2 次元配列.
文字列へのポインタの配列 static char *lines[MAXLINES]; lines[0] NULL
第13回 ポインタ 1 1.
プログラミング論 ポインタ
11.1 標準ライブラリ関数 11.2 関数呼び出しのオーバーヘッド 11.3 大域変数 11.4 プロトタイプ宣言 11.5 関数引数
アルゴリズムとデータ構造1 2009年6月15日
R8C I/Oポートの仕組み SFR定義ファイルの中身.
ネットワーク・プログラミング Cプログラミングの基礎.
第5回 プログラミングⅡ 第5回
オブジェクト指向言語論 第五回 知能情報学部 新田直也.
オブジェクト指向言語論 第二回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2010年6月17日
演算子のオーバーロード.
プログラミング演習I 2003年6月11日(第9回) 木村巌.
2005年度 データ構造とアルゴリズム 第2回 「C言語の復習:配列」
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習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]
情報処理Ⅱ 小テスト 2005年2月1日(火).
プログラミング演習II 2003年10月29日(第2,3回) 木村巌.
オブジェクト指向言語論 第六回 知能情報学部 新田直也.
プログラミング 3 ポインタ(1).
プログラミング 2 静的変数.
Presentation transcript:

ポインタとポインタを用いた関数定義

Quiz Q1. int main(void) { int a=1, b=0; int a=2; b=b+a; } b=a+b; printf(“%d\n”,b); Q2. int main(void) { int a, b=0; for(a=0;a<2;a++){ static int b=0; b=a+b; } printf(“%d\n”,b);

前回の復習 関数の定義 変数の有効範囲 関数の再帰的定義と再帰呼び出し

変数の属性 8bit = 1byte(バイト) 0000H 0001H 0002H 0003H 1 0004H a: 2バイト 1 0004H a: 2バイト (sizeof演算子で入手) aのアドレスが決まる(例の場合は0004H) アドレス0004に33に相当する値が格納される (auto変数のアドレスは関数呼び出し時に、static変数はプログラム実行時に決定) メモリ

ポインタ変数とアドレス計算 アドレス演算子&を用いる 前の例では&aは0004Hとなる。 アドレスを陽に記憶するためにはアドレスを値として格納する変数が必要!   ポインタ型変数:アドレスを値として持つ変数

ポインタ変数の宣言と使い方 ・型名 *変数名{,*変数名;} 注意: 配列名は配列の最初の要素が 格納されているアドレスであり、 ・型名 *変数名{,*変数名;} 注意: 配列名は配列の最初の要素が 格納されているアドレスであり、 ポインタ型の定数である。 Int data[10], *p; p=data;

間接参照演算子* ポインタ変数の「値」が指すアドレスの中身を取り出したり、逆に格納するための演算子。 変数の名前を用いずに変数の値を使うことが可能に! ② ① a: p: b: 0 2 0004H 1 0005H 4 0006H 0007H 0008H 0009H a: p: b: 0 2 0004H 1 0005H 0006H 0007H 0008H 0009H 変数名aを使わずに値が使われた,変更された! 変数のアドレスを使うことにより、明示的に 変数名を使わずに値を参照したり、変更できる。 ④ ③ a: p: b: 0 1 0004H 0005H 4 0006H 0007H 2 0008H 0009H a: p: b: 0 2 0004H 1 0005H 4 0006H 0007H 0008H 0009H

配列とポインタ ① ② ③ data[0]: data[0]: data[0]: data[1]: data[1]: p: p: p: 0009H 000AH 000BH 000CH 000DH 000EH 000FH 0010H 0011H 0009H 000AH 000BH 000CH 000DH 000EH 000FH 0 A 0010H 0011H 0009H 000AH 000BH 0 2 000CH 000DH 000EH 000FH A 0010H 0011H data[0]: data[0]: data[0]: data[1]: data[1]: p: p: p:

ポインタ変数を用いた関数定義(1) ポインタ変数を用いる理由 関数を呼び出して関数の値として結果を返すと、1つの値しか返せない 値を渡さないでそのあり場所(アドレス)を渡した方が処理が速い場合がある 関数を一度だけ呼び出して、呼び出し側の変数の値を複数個変更できる その他の方法 大域変数を使う(バグの元) 配列を使う(同じ型の結果のみ)

関数に2つアドレスを渡して値をコピーするプログラム a: b: 0 2 0004H 0005H 2 0006H 0007H 0008H 0009H 0 2 0004H 0005H 0006H 0007H 0008H 0009H p1: p2: 0 6 0004H 0005H 4 0006H 0007H 0008H 0009H *p1=*p2 →  *p1=2 →  *(0006)=2

ポインタ変数を用いた関数定義(1) 2つの整数の和と積を1つの関数を呼び出すだけで計算する 大域変数の使用 配列の使用 ポインタの使用