約 695,196 件
https://w.atwiki.jp/mugencns/pages/16.html
トリガー情報の一覧 参考・引用元:トリガー索引 トリガーの基本的な仕様についてはとりあえず割愛 特定の項目を探したい場合は、F3などで使えるブラウザのページ内検索機能をご利用下さい 数式・条件式に使う演算子は該当ページ参照。 方針メモ 大体ステコンの方といっしょの方針。 分類予定表 リダイレクト全般 個別ページ Num系 NumEnemy他 P2系 P2Life,P2StateType他 ※P2BodyDist,P2Dist除く 引数系 Floor(),Abs()他、E含む キャラのパラメーター情報 Alive,Life,Ctrl,StateType他 アニメ系 Anim,Animelem他 距離・速度系 P2Bodydist X,BackEdgeDist、Vel X他 攻撃系 MoveContact,Hitcount他 試合のパラメーター情報 GameTime,RoundState他 変数系 Var,FVar,SysVar,SysFVar Common用、CanRecover,Const()他 その他 Name,AuthorName他 情報の種類 Int型:Integer型、整数型。小数を含まない数値。bool型:boolean型、Int情報の一種。真の場合1を、偽の場合0を返す。一応、条件式もbool型。 Float型:浮動型。小数を扱える数値。Int型パラメーターに入れるとエラーが流れる。 Char型:character型、文字型。ただし文字情報を他の式やパラメーターに使うことはできない。 String型:文字列型。文字を他の式やパラメータに使うことはできない。Char,Stringの文字系情報は全て専用の条件式が存在し、ひとまとまりのbool型情報として扱う。 面倒なので単に「文字」「文字列」と表現することも多い。 ステートコントローラー一覧のページでは一部Float型にFloat型の設定項目へ直接入れないほうがよいと書かれているが、気にしなくても良い? ごく一部で発生するのかもしれないため、不安ならT-/Floor()でInt型に変えておくと良い。 [State xxx, xxx];ステートコントローラー始動記述 Type = *ステートコントローラー名* Value = *基本命令数値* TriggerAll = *トリガー* ; Trigger1 = *トリガー* ;※Trigger1は最低一行必要 Trigger2 = *トリガー* ; Trigger3 = *トリガー* ; トリガーの基本 TriggerはAll→1→2→3→…の順番で参照を行う。参照は真(0以外)と偽(0)で判定される。 条件式は合っていれば1を合っていない場合0を返す。 参照した行が真の場合、同じ番号の次の行を参照する。真で同じ番号の次の行がない=Allと同じ番号が全て真ならステートコントローラーを実行。 ステートコントローラーを実行する場合、次の番号のTriggerなどは参照されない。 参照した行が偽の場合、次の番号を参照する。TriggerAllで偽だった場合・次の番号が無い場合は参照を終了する。番号が途切れていても読み込みを終了する。(1,2,4しかない場合1,2までしか読み込まれない) 数式・条件式に使う演算子は該当ページ参照。 条件式はあまりに文字数が多いとエラーで落ちる。演算子が多い場合も同様。 引数について トリガー情報によっては数値を併記する場合がある。基本的に算術を行うトリガー情報の引数はFloat型でも構わないが、 IDなどを要求するトリガー情報の引数はInt型でなければならない。IDの他にはフレーム数なども。 Num系 NumPartner【パートナー数】 NumEnemy【敵数】 NumTarget【Target数】 NumHelper【Helper数】 NumExplod【Explod数】 NumProj【Projectile総数】 NumProjID()【Projectile数・指定ProjID】 PlayerIDExist()【指定IDキャラの存在確認】 P2系 P2StateType【相手体勢】 P2MoveType【相手行動状態】 P2StateNo【相手の現在の番号ステート】 P2Life【相手残り体力】 P2系の対象についてはリダイレクトのページを参照 →T-/P2Nameはその他の欄 →T-/P2Dist X系は距離・速度の欄 引数系 数値編集系 Abs()【絶対値】 Floor()【小数切り下げ】 Ceil()【小数切り上げ】 Log()【対数】 三角関数 Sin()【サイン】 ※三角関数に関する細かいことはサインのページに Cos()【コサイン】 Tan()【タンジェント】 Asin()【アークサイン】 Acos()【アークコサイン】 Atan()【アークタンジェント】 ネイピア数 Exp()【ネイピア数の冪乗】 Ln()【自然対数】 条件分岐式 IfElse()【条件分岐式】 キャラのパラメーター情報 Alive【生存確認】 Ctrl【基本行動可能確認】 Facing【キャラの向き】 Time【番号ステートの経過フレーム数】 TimeMod【Timeの剰余計算】 StateType【体勢】 MoveType【行動状態】 StateNo【現在の番号ステート】 PrevStateNo【直前の番号ステート】 Life【残り体力】 Power【パワーゲージ】 ID【キャラID】 LifeMax【最大体力】 PowerMax【パワーゲージ最大値】 PalNo【パレット番号】 IsHelper【自身がヘルパーであるか】 TeamSide【キャラの所属サイド】 TeamMode【チームモード】 アニメ系 Anim【アニメ番号】 AnimTime【アニメ時間】 AnimElem【アニメ表示Elem】 AnimElemTime()【アニメ表示ElemTime】 AnimElemNo()【アニメ表示ElemNo】 AnimExist()【アニメ存在確認】 SelfAnimExist()【アニメ存在確認Self】 距離・速度系 座標 Pos X【X座標位置】 Pos Y【Y座標位置】 ScreenPos X【X座標位置・画面左上基準】 ScreenPos Y【Y座標位置・画面左上基準】 相手までの距離 P2Dist X【相手までのX距離】 P2Dist Y【相手までの高さ】 P2BodyDist X【相手までのX距離・キャラ幅基準】 P2BodyDist Y【相手までの高さ】 Helperから RootDist X【Helperから本体までのX距離】 RootDist Y【Helperから本体までの高さ】 ParentDist X【Helperから親までのX距離】 ParentDist Y【Helperから親までの高さ】 速度 Vel X【X速度】 Vel Y【Y速度】 HitVel X【くらいノックバックX速度】 HitVel Y【くらいノックバックY速度】 EdgeDist・画面端までの距離 FrontEdgeDist【前画面端への距離・基本値】 BackEdgeDist【後ろ画面端への距離・基本値】 FrontEdgeBodyDist【前画面端への距離・キャラ幅込み】 BackEdgeBodyDist【後ろ画面端への距離・キャラ幅込み】 攻撃系 攻撃命中確認 MoveContact【攻撃命中確認】 MoveHit【攻撃ヒット確認】 MoveGuarded【攻撃ガードされ確認】 MoveReversed【攻撃取られ確認】 Proj命中確認 ProjContact【Proj命中確認】 ProjHit【Projヒット確認】 ProjGuarded【Projガードされ確認】ProjContactTime()【Proj命中時間確認】 ProjHitTime()【Projヒット時間確認】 ProjGuardedTime()【Projガードされ時間確認】 ProjCancelTime()【Proj相殺時間確認】 攻撃属性 HitDefAttr【HitDef攻撃属性確認】 HitPauseTime【攻撃HitPause残り時間】 ヒット回数 HitCount【攻撃1つのヒット回数】 UniqHitCount【攻撃1つの総ヒット数】 攻撃の総ヒット数は参照不可。自分の受けたヒット数ならGetHitVar(HItCount)である程度分かるが。 ※Common用]の欄も参照。 試合のパラメーター情報 RoundNo【ラウンド数】 RoundsExisted【経過ラウンド数】 RoundState【ラウンドの状態】 GameTime【試合画面経過時間】 IsHomeTeam【ホーム確認】 MatchNo【試合数】 勝敗判定 Win【ラウンド勝利判定】 WinKO【ラウンドKO勝利判定】 WinTime【ラウンド時間切れ勝利判定】 WinPerfect【ラウンドパーフェクト勝利判定】 Lose【ラウンド敗北判定】 LoseKO【ラウンドKO敗北判定】 LoseTime【ラウンド時間切れ敗北判定】 DrawGame【ドローゲーム判定】 MatchOver【試合決着判定】 変数系 解説はVarを参照 Var()【Int型変数】 FVar()【Float型変数】 SysVar()【Int型システム用変数】 SysFVar()【Float型システム用変数】 Common用 CanRecover【受身の可不可】 Const()【CNS確認】 GetHitVar()【受けた攻撃の情報】 InGuardDist【相手のAttackDist内確認】 くらい状態・状況の認識 HitFall【くらい倒れ属性】 HitOver【くらいのけぞり終了】 HitShakeOver【くらいHitPause終了】 その他 キャラ名・制作者名 Name【キャラ名】 P1Name【キャラ名】 P2Name【相手キャラ名】 P3Name【パートナーキャラ名】 P4Name【相手二人目キャラ名】 AuthorName【制作者名】 その他 Random【乱数】 Command【コマンド認識】 TicksPerSecond【1秒あたりの処理フレーム】 数学 E【ネイピア数】 Pi【円周率】
https://w.atwiki.jp/cschola/pages/21.html
string C++の標準ライブラリには文字列操作を便利にした string というものがあります。 従来の char* は単なる文字配列でしたが、stringは文字列操作のための演算子や関数が用意されています。 stringを使うには string をincludeします。 #include string string は std に含まれているため std string でアクセスします。 初期化 string の初期化の内基本的な2種類を紹介します。 std string str; std string str("はろー わーるど!"); このほかにも多くの初期化方法が用意されています。 代入 文字列の割り当てには = 演算子か .assign() を使います。 std string str; str = "はろー わーるど!";// = で代入 str.assign("はろー わーるど!");// .assign() で代入 追加 結合 = か + 演算子または .append() を使うことで文字列の後ろに他の文字列を追加できます。 std string str; str = "はろー";// "はろー"を代入 str += " わーるど";// "わーるど" を = で追加 str.append("!");// "!" を .append()で追加 比較 == != = = を使い文字列同士を比較することが出来ます。 また .compare() を使うと比較結果を戻り値で返してくれます。 std string str1("ABC");// str1を "ABC" で初期化して作成 std string str2 = str1;// str1 をコピーして str2を作成 // str1 と str2 を比較 if(str1 == str2){ std cout str1 + "と" + str2 + "は同じ" std endl; } 文字の取得 文字列から文字を取り出すには [] 演算子か .at() を使います。 std string str("abcdef");// str を "abcdef" で初期化して作成 char c1 = str[0];// strの0番目 a を c1 に入れる char c2 = str.at(5);// strの5番目 f を c2 に入れる std cout c1 c2 std endl;//c1 と c2 を表示 文字列の取得 .substr() を使うと指定した部分の文字列が返ってきます。 第1引数が取り出す位置で、第2引数が取り出す長さです。 std string str1("Hello World!!"); std string str2; str2 = str1.substr(6,5); // str の6番目から5文字 "World" を抜き出して str2 に代入 std cout str2 std endl;// str2を表示 第2引数を省略すると文字列の最後まで取り出されます。 文字列の長さを調べる 文字列の長さを調べるには .length() か .size() を使います。 これら2つは同じ意味です。 std string str("abc"); // str の長さを表示 std cout str.length() std endl str.size() std endl; 日本語は2バイト文字という点に気をつけましょう。 文字列が空かどうか調べる .empty() を使うと、文字列が空のとき true を返し、それ以外のとき false を返します。 練習問題 次のようなプログラムを作ってください 第1問 ユーザーからの入力を文字列に割り当て "Apple"という文字と比較する。 また比較した結果によりメッセージを出力する。 第2問 ユーザーからの入力を文字列に割り当て、 長さが5以上の文字列が入力されるまで繰り返す abc 5文字以上入力してください hello オッケー testcounter 合計 - 今日 - 昨日 -
https://w.atwiki.jp/civilization/pages/2560.html
要修正項目 イメージ表示用構文の修正 各ページごとに下記2つの正規表現を使って置換(上から順に 置換前 置換後 ref\(([^,;]+)\/([^,;]+\.(gif|jpg|png)) ref($2,$1 \ icon\ ([^;]+); ref(font_$1.png,アイコン,,nolink) リンク切れの修正 リンクの表記が相対パスの場合@Wikiでは認識できていない 例) 修正前 修正後 ./古代 テクノロジー/古代 #includeの引数 #includeプラグインの引数は@Wikiでは引数が1つのみしか動かない ページサイズ @Wikiでは1ページあたり50,000バイトまでの入力しか許可していないので、内容が多いページは分割する必要がある 新しく作成するページはpukiwikiモードが一番互換性が高い模様 行頭の一分文字 行頭が「構文文字の全角相当の文字」だと正常に処理できない模様。 例えば+など(半角の+は番号付きリスト) 名前 コメント
https://w.atwiki.jp/autoit/pages/27.html
標準入力からデータを読み取ります。 ConsoleRead([peek = False [, binary = False]]) 引数 peek (省略可) この引数が True の場合、読み取った文字をストリームから削除しません。 binary (省略可) この引数が True の場合、データをバイナリとして読み取ります。(デフォルトではテキストとして読み取ります)。 戻り値 成功時 読み取ったデータ。 @extended は読み取ったバイト数になります。 失敗時 EOF (データ終端) に到達した場合や、標準入力が接続されていない場合は、 @error を0以外の値に設定します。 詳細 執筆中... 関連 ConsoleWrite, ConsoleWriteError, Run
https://w.atwiki.jp/rai002/pages/52.html
マルチバイト文字 インクルードファイル ctype.h isspace 書式 int isspace( int c ) 機能 空白判定 引数 int c 判定する文字 戻り値 空白(0x20)、水平タブ(0x09)、垂直タブ(0x0B)、改行(0x0A)、復帰(0x0D)、改頁(0x0C)であれば、0以外を返し、そうでなければ、0を返します。 ispunct 書式 int ispunct( int c ) 機能 記号判定 引数 int c 判定する文字 戻り値 記号( 0x21~0x2F, 0x3A~0x40, 0x5B~0x60, 0x7B~0x7E )であれば、0以外を返し、記号でなければ、0を返します。 iscntrl 書式 int iscntrl( int c ) 機能 制御文字判定 引数 int c 判定する文字 戻り値 制御文字( 0x00~0x1F, 0x7F )であれば、0以外を返し、制御文字でなければ、0を返します。 ワイド文字(多分) インクルードファイル ctype.h または wchar.h iswspace 書式 int iswspace( wint_t c ) 機能 空白判定 引数 wint_t c 判定する文字 戻り値 空白、水平タブ、垂直タブ、改行、復帰、改頁であれば、0以外を返し、そうでなければ、0を返します。 iswpunct 書式 int iswpunct( wint_t c ) 機能 記号判定 引数 wint_t c 判定する文字 戻り値 記号であれば、0以外を返し、記号でなければ、0を返します。 iswcntrl 書式 int iswcntrl( wint_t c ) 機能 制御文字判定 引数 wint_t c 判定する文字 戻り値 制御文字であれば、0以外を返し、制御文字でなければ、0を返します。
https://w.atwiki.jp/tmiya/pages/31.html
4.2 パラメータ def を使って、パラメータを持った関数を定義できます。たとえば scala def square(x Double) = x * x square (Double)Double scala square(2) unnamed0 Double = 4.0 scala square(5 + 3) unnamed1 Double = 64.0 scala square(square(4)) unnamed2 Double = 256.0 scala def sumOfSquares(x Double, y Double) = square(x) + square(y) sumOfSquares (Double,Double)Double scala sumOfSquares(3, 2 + 2) unnamed3 Double = 25.0 関数のパラメータは関数名の後に置かれ、常に括弧で囲まれます。各パラメータは型を伴い、型はパラメータ名とコロンに続いて示されます。現時点では、倍精度数の scala.Double 型のような基本的な数値型だけを必要とします。Scala では、いくつかの標準的な型について 型エイリアス が定義されていて、数値型は Java と同じように書けます。たとえば double は scala.Double の型エイリアスであり、int は scala.Int の型エイリアスです。 パラメータをもつ関数は、式の演算子と同じように評価されます。はじめに関数の引数が (左から右の順序で) 評価されます。つぎに関数適用が関数の右辺で置き換えられ、同時に関数のすべての形式上のパラメータが対応する実際の引数で置き換えられます。 Example 4.2.1 sumOfSquares(3, 2+2) → sumOfSquares(3, 4) → square(3) + square(4) → 3 * 3 + square(4) → 9 + square(4) → 9 + 4 * 4 → 9 + 16 → 25 この例は、インタプリタが関数適用の前に、関数の引数を値に簡約することを示しています。この代わりに、簡約されていない引数に関数適用することも選択できます。それは次の簡約列をもたらします。 sumOfSquares(3, 2+2) → square(3) + square(2+2) → 3 * 3 + square(2+2) → 9 + square(2+2) → 9 + (2+2) * (2+2) → 9 + 4 * (2+2) → 9 + 4 * 4 → 9 + 16 → 25 二つ目の評価順序は 名前渡し (call-by-name)として、はじめの例は 値渡し (call-by-value)として知られています。純粋な関数だけを使用する式や、したがって、置き換えモデルで簡約可能な式では、どちらの枠組みでも同じ値となります。 値渡しには、引数評価を繰り返さないという利点があります。名前渡しには、パラメータが関数で全く使用されない時に引数の評価を避けるという利点があります。ふつう、値渡しは名前渡しより効率的ですが、値渡し評価は、名前渡し評価なら終了する箇所でループするかもしれません。次を考えてみましょう。 scala def loop Int = loop loop Int scala def first(x Int, y Int) = x first (Int,Int)Int すると、first(1, loop) は名前渡しでは 1 に簡約されますが、値渡しでは繰り返し自分自身へと簡約され、したがって評価は終了しません。 first(1, loop) → first(1, loop) → first(1, loop) → ... Scala はデフォルトでは値渡しを使いますが、パラメータ型の前に = が置かれた場合は名前渡し評価へと切り替えます。 Example 4.2.2 scala def constOne(x Int, y = Int) = 1 constOne (Int,= Int)Int scala constOne(1, loop) unnamed0 Int = 1 scala constOne(loop, 2) // 無限ループとなる ^C // Ctrl-C で実行を停止 前ページ 4 章 目次 次ページ 「~すべての正式な関数の仮引数が~」は、単に「関数のすべての仮引数が~」で良いのではないでしょうか。あと、「実際の引数」は実引数とするのがより一般的かと思います。 -- みずしま (2008-04-15 21 23 31) ご指摘どうもありがとうございます>みずしまさん。修正致しました。 -- tmiya (2008-04-16 21 54 28) 名前 コメント
https://w.atwiki.jp/fumiduki1985/pages/309.html
getOpenFileName関数を使用すると可能。 主に下記の引数が使用可能。他の引数はマニュアルを参照のこと。 caption:ダイアログのタイトルを文字列で指定。 filename:初期ファイル名を文字列で指定。 types:ダイアログで選択可能なファイルフィルタを文字列で指定。書式は下記記述例を参照。 記述例: f = getOpenFileName caption "File Open" filename "default.txt" types "text(*.txt)|*.txt|All(*.*)|*.*" このページのタグ一覧 3dsMax MAXScript プログラミング
https://w.atwiki.jp/genshiken/pages/23.html
080128 試験とかあるので提出は二週間先までということで。来週はおやすみします。 二次元座標の計算 二点間の距離を返す関数、二点の中点を返す関数を書いてください。 なお、点は下に示す構造体で示されるものとします。 struct Point{ double x, y; }; また、以下の仕様を満たすことを条件とします。 Point型の引数を二つ受け取る。 距離を返す関数はdoubleを、中点を返す関数はPoint型オブジェクトを返してください。 構造体が分からない人はwiki…は書き進んでないので手元の参考書を参照してください -) 連絡 京都とか行ってて更新が遅れました。 さて11日現在、二人しか提出されてません。さらにきちんと解けてる人がいない状況なので来週までとりえず伸ばします。 uhito 普通に値として構造体を返せば問題ないです。 /* Pointを返すだけの関数 */ struct Point point_return(){ struct Point pt; return pt; } ikura 前者に関しては、putcharがchar型の変数を一つ受け取るように、距離を返す関数と中点を返す関数はPoint型の変数をふたつ受け取る、というそのままの意味なのですが… 例えばPoint型の変数を一つ受け取る関数は下のようにかけますね。 void func(struct Point pt){} 後者はすみません。書き方が悪かったです。中点を返す関数はPoint型の値を返してください、という意味です。というか中点を返す関数が点以外の物返してどうする、という話ですね。 構造体とは 簡単に説明。 構造体とは複数の値をまとめておくための物です。 例えば二次元座標は二つの値を使って表されますが、二つの値を別々にではなく、一つの座標として扱いたいことがあります。 関数から座標を返したい時などですね。そのままでは一つの値しか返すことができません。 そういった場合に、内部に二つの値を持つ一つの値として構造体を定義してやれば、二つの値を返すことができる、というわけです。 値の取り出し方、書き込み方は、今回の例に合わせると、 struct Point pt; pt.x = pt.y = 0; /* 書き込み */ int i = pt.x; /* 取り出し */ のような感じです。「.」を使います。 C言語では構造体の型を宣言するときは、組み込み型(int や double)とは違って、struct と明示的に構造体であることを表す必要があります。注意。 追記:構造体のページを作りました。 解答例 #include math.h double range(struct Point pt1, struct Point pt2){ double mx = pt1.x - pt2.x, my = pt1.y - pt2.y; return sqrt(mx * mx + my * my); } struct Point middle_point(struct Point pt1, struct Point pt2){ struct Point ret; ret.x = (pt1.x + pt2.x) / 2.0; ret.y = (pt1.y + pt2.y) / 2.0; return ret; } 採点 uhito 原点と、じゃなくて二点間の、です… ikura 一応#include math.h は書いてね。あと冗長な一時変数が多いです。 tatikoma よろしー。ただstruct Point disは必要無いと思う。 take 差が負だろうと二乗すれば正になると思うよ!
https://w.atwiki.jp/stgbuilder/pages/528.html
「%■」1個につき、引数1個を表す。 「%■」が複数個(1-3個)ある場合は、順に引数1,引数2,引数3となる。 例1-1) %d 引数1:変数1=10 表示:10 例1-2) %d %d 引数1:変数1=10 引数2:変数2=100 表示:10 100 例1-3) %d %d %d 引数1:変数1=10 引数2:変数2=100 引数3:変数3=1000 表示:10 100 1000 「%d」「%-■d」は、最小桁を保証しない 10進数の整数(左寄せになる) 「%■d」「%_■d」は、最小■桁を空白で保証する 10進数の整数(■桁に満たない場合、空白で埋めて桁を確保) 「%0■d」は、最小■桁を「0」で保証する 10進数の整数(■桁に満たない場合、0で埋めて桁を確保) 「%+d」は、最小桁を保証しない 符合(+,-)付きの 10進数の整数(左寄せになる) 「%+■d」「%+_■d」は、最小■桁を空白で保証する 符合(+,-)付きの 10進数の整数(■桁に満たない場合、空白で埋めて桁を確保) (符合も1桁としてカウントされる) 「%+0■d」は、最小■桁を「0」で保証する 符合(+,-)付きの 10進数の整数(■桁に満たない場合、0で埋めて桁を確保) (符合も1桁としてカウントされる) 例2-1) %d %2d %4d 引数1:変数1=100 引数2:変数2=100 引数3:変数3=100 表示:100 100 _100 例2-2) %d %02d %04d 引数1:変数1=100 引数2:変数2=100 引数3:変数3=100 表示:100 100 0100 「(%で始まらない)文字列」は、そのまま表示されるが、「%」そのものは表示できない。 「%%%%」で、文字列として「%」(1個のみ)が表示される。 例3-1) %d + %d = %d 引数1:変数1=1 引数2:変数2=2 引数3:変数3=3 表示:1 + 2 = 3 例3-2) %d %%%% %d %%%% %d %%%% 引数1:変数1=1 引数2:変数2=10 引数3:変数3=100 表示:1 % 10 % 100 % 文字列 タブ,printf レイアウ編集
https://w.atwiki.jp/chugoku/pages/155.html
ポインタのポインタ 疑問に思ったら作ってみる。 cvReleaseImage関数のプロトタイプ宣言はvoid cvReleaseImage( IplImage** );となっている。 静止画像データの開放の関数などは引数にポインタのポインタを渡すようになっている。 例として以下のような流れのコードで説明する。 int main(void){ ???????; IplImage *src_img_gray;//ポインタ変数を作る ????????; src_img_gray = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1);//ポインタ変数が指す実体を作る。実体は静止画像。 ????????; ????????; ????????; cvReleaseImage ( src_img_gray);//実体が入っている先頭アドレスを渡して開放要求を出す。 return 0; } 上記のコードを説明する。 IplImage *src_img_gray;と静止画像を保存するポインタ変数を宣言し、例えばcvCreateImage関数で実体を作る。 src_img_gray = cvCreateImage (cvGetSize (src_img), IPL_DEPTH_8U, 1); src_img_grayはポインタ変数なのでアドレスが入るのだが、静止画像を保存する構造体があるメモリの先頭アドレスが入っているはずだ。開放する場合は、このアドレスがあれば開放できる。 さて、 これを開放する時にcvReleaseImage ( src_img_gray);とする。 引数には**が2つある変数を渡さなければいけないのだがsrc_img_grayは*1つ。だから を付けることで結果的にsrc_img_grayが指しているアドレスを渡すことになる。 この仕組を調べるコードを書いてみる #include stdio.h void pointer_of_pointer(int **xx){//擬似cvReleaseImage関数 printf("in function xx data %x **xx data %x\n",xx,**xx);//xxの中身とxxが指している先のそのまたそこが指している先の値を表示 } int main(void){ int i,*p,**pp; i=9; p= i; pp= p; printf("i data %x i address %x\n",i, i);//変数の中身と変数のメモリ上のアドレスを表示する。 printf("p data %x p address %x\n",p, p); printf("pp data %x pp address %x\n",pp, pp); printf("pointer_of_pointer(pp);\t"); pointer_of_pointer(pp); printf("pointer_of_pointer( p);\t"); pointer_of_pointer( p); //これはエラー pointer_of_pointer(p); return 0; } 実行してみると。 C \usr\opencv\C_C++の練習\ポインタのポインタ main.exe i data 9 i address 12ff70 p data 12ff70 p address 12ff74 pp data 12ff74 pp address 12ff6c pointer_of_pointer(pp); in function xx data 12ff74 **xx data 9 pointer_of_pointer( p); in function xx data 12ff74 **xx data 9 C \usr\opencv\C_C++の練習\ポインタのポインタ pを渡しても、ppを渡しても同じ結果だ。 i変数のメモリイメージ、i変数はコード上ではiという文字列(シンボル)だが、コンパイルして実行可能な状態になる(機械語)と0x12ff70の番地にある4バイト枠(int型)として処理される。 この番地を指しているp変数(p変数の中身は0x12ff70)。p変数はコンパイルして実行可能な状態になる(機械語)と0x12ff74の番地にある4バイト枠(ポインタだから)として処理される。 さらに、pp変数は、p変数のメモリ上の番地を入れている。 i 12ff70番地 9 p 12ff74番地 12ff70 pp 12ff6c番地 12ff74 ものぐさなひとに 関数の引数にポインタを渡すときに変数に&を付けると覚えているひとは、関数の引数にポインタのポインタを渡す必要があるときはポインタ変数に&を付けると覚える。 何でポインタのポインタにするの? 引数をポインタのポインタにすると利点がある?という疑問だ。 さて、main関数の第2引数もポインタのポインタだ。 int main(int argc,char* argv[]{。。。} または、 int main(int argc,char** argv{。。。} とも書ける。 第二引数はポインタのポインタだが、この引数にデータを渡すのはWindowsならcmd.exeかエクスプローラだ。cmd.exeとはコマンドプロンプトのこと。これらはシェルと言う。このシェルが引数にデータを渡すのでCコード上での引数の渡し方とは若干違いがあるが最も身近なポインタのポインタの例として説明する。 以下のコマンドmycalcは引数を使って計算する。 C \Documents and Settings\username mycalc 10 5 add 15 sub 5 引数の数とそれぞれの引数の長さがわからない場合にポインタのポインタが使える。 cmd.exeやエクスプローラは、引数のリスト4バイトサイズのリストを作る。このリストの個数はargcに入っている。実際に欲しいのは文字列だが、この長さがいろいろだ。だから一旦それぞれの文字列の先頭アドレスの表を作るという考え方だ。これでプログラムからはそのリストを参照することで長さがまちまちで、メモリ上に不規則に配置されている文字列を参照できる。 argv[0]の先頭アドレス argv[1]の先頭アドレス argv[2]の先頭アドレス argv[3]の先頭アドレス argv[4]の先頭アドレス 。。。。。。 コマンドラインの引数(パラメーラ)、ここでは10とか5の文字列(長さがまちまち)がどこかにあるが、argv[?]はポインタ変数で、これが指している先に文字列の10や文字の5がある。 パソコン活用研究シリコンバレー(C、C++、の活用研究) 絶対保存版! 長谷川裕行氏のロードワークコラム 「今日の訪問数 - 」 「昨日の訪問数 - 」 「今までの訪問数 - 」 名前 コメント