約 605,396 件
https://w.atwiki.jp/akios/pages/68.html
4. 型と値と変数 4.1. 型と変数の種類 4.2. プリミティブ型と値 4.3. 参照型と値 4.4. 型変数 4.5. 引数付き型 4.5.1. 型実引数とワイルドカード 4.5.2. 引数付き型のメソッドとコンストラクター 型引数A1,...,Anを伴うジェネリッククラスやインタフェース宣言をCとします。C T1,...,Tn はCの呼び出しであるとし、1≦i≦nに対しTiは(むしろワイルドカードではない)型だとします。すると mをC内のメンバーもしくはコンストラクター宣言(8.2.、8.8.6.)とし、その宣言された型をTとすると、 C T1,...,Tn 内のmの型はT[A1 =T1,...,An =Tn]です。 mをD内のメンバーもしくはコンストラクター宣言とします。ここで、DはCを拡張した型もしくはCを実装したインタフェースです。D U1,...,Uk をDと対応するC T1,...,Tn のスーパータイプとすると、 C T1,...,Tn 内のmの型はD U1,...,Uk 内のmの型です。 Cの呼び出しにおける型実引数のいずれかがワイルドカードならば、 C T1,...,Tn 内のフィールドやメソッドやコンストラクターの型は、C T1,...,Tn の捕捉変換内のフィールドやメソッドやコンストラクターの型です。 DをC内のクラスやインタフェース宣言(ジェネリックでも構わない)とします。Dがジェネリックであれば、C T1,...,Tn 内のDの型はDであり、全ての型実引数は非制限ワイルドカードです。 これは重要ではありません。引数付き型のメンバーに捕捉変換なしでアクセスするのは不可能であるためであり、クラスインスタンス作成式の中でnewキーワードの後にワイルドカード型は使えないためです。 前文の唯一の例外は入れ子になった引数付き型がinstanceof演算子の中の式として使われる場合です。この時、捕捉変換は適用されません。 4.6. 型の抹消 4.7. 具象可能型 4.8. 未加工型 4.9. 交差型 4.10. サブタイプ化 4.11. 型の使用箇所 4.12. 変数
https://w.atwiki.jp/mopsprogramming/pages/134.html
この機能はMac OS X限定で、PowerMops 5.5以降から利用可能です。iMopsでは、LibCallsというソースファイルをロードすれば、利用可能となります。この機構はiMopsでも利用可能です。 Mac OS Xではシェアードライブラリはframeworkという名前で提供されます。フレームワークコールは、それを利用するための機構です。フレームワークの中でも、OSに組み込まれたものはパブリックフレームワークと呼ばれます。FrWkCallは、この、パブリックフレームワークを利用可能にします。その意味でやや制限的ですが、OS X版のLibcallに当たるといえます。FrwkCallという宣言はフレームワークコール(FrameworkCall)を略したものです。 シンタックスはLibCallと全く同じです。まず、フレームワークを宣言して、そのあとに、そのフレームワークに属する関数を、パラメターデータ付きで宣言します。浮動小数点数パラメターは、最初に"%"マークを付けます。例えば、 Framework OpenGL.framework FrWkCall glRotated { %ang %x %y %z -- } のようになります。全部浮動小数点ですみません。整数(含、レファレンスポインタ)型の引数には"%"は頭に付けてはいけません。 同じフレームワークからの関数を並べて宣言するときには、フレームワークを宣言し直す必要はありません。別のフレームワークの関数を宣言するなら、その前に、そのフレームワークを宣言します。フレームワーク名を宣言することにより、以降そのフレームワークがCurrentフレームワークになるのだ、と考えることができます。 これらの宣言も、外部呼び出しに関わることですから、フレームワーク名と関数名は大文字小文字の違いを正しく書き分けてください。 関連項目: MachOCall シェアードライブラリコール トップページへ 目次へ
https://w.atwiki.jp/okoba0119/pages/22.html
getopt 引数はsys.argvにリストで入ってくる オプション引数の解析はgetopt getoptの第二引数で、「 」が付くのは値をとるとき。 getopt(args, shortopts, longopts=[]) argsには引数 shortoptsは、引数が1文字の時 longoptsは長い引数の時 ex. --help --width 10のような時. ["help","width="]) sample code import getopt import sys try optlist.args = getopt.getopt(sys.args[1 ],"f ") except getopt.GetoptError,pe print pe.msg sys.exit(0) for opt,args in optlist if opt in ("-f") print("ok") optparse getoptより処理が楽. sample code infileには読み込むファイル outfileには何か処理をして吐き出すファイル よくあるパターンのスクリプト #! /bin/env python import outparse # getfile def getfiles() usage = u %prog [-f infile] [-o outfile] parser = optparse.OptionParser(usage=usage) parser.add_option( -f , --infile , action= store , type= string , help=u input text file , metavar= infile ) parser.add_option( -o , --outfile , action= store , type= string , help=u output text file , metavar= outfile ) options.args = parser.parse_args() # main if __name__ = __main__ getfiles() 実行結果1. -hの引数でヘルプが出るのだ. [$/home/python] ./unko.py -h Usage unko.py [-f infile] [-o outfile] Options -h, --help show this help message and exit -f infile, --infile=infile infile text file -o outfile, --outfile=outfile outfile text file 実行結果2. -f optionにちゃんと引数をつけるといけるみたいだ [$/home/python] ./unko.py -f unko [] { outfile None, infie unko } 実行結果3. -o optionもちゃんとつけて完成 [$/home/python] ./unko.py -f unko -o test [] { outfile test , infile unko } その他のoption add_optionで書いてあるように、オプションを設定できる。 引数を取らないオプション action引数に、 store_true 、 store_false を指定することにより作成 オプションが設定されると store_true は True を、 store_false は False をオプションの属性に格納
https://w.atwiki.jp/sevenlives/pages/712.html
仮引数 読み:かりひきすう 英語:formal parameter 別名: 意味: 仮引数とは関数やサブルーチンの宣言側に指定される引数のこと。 関数名の後ろに「(」と「)」の中に書かれ、引数の数や型が指定される。 実態は変数であり、型に厳しい言語では型指定がある。 2007年11月04日 引数
https://w.atwiki.jp/hks2/pages/19.html
"..." で与えられた引数の処理 fun - function(x, ...) { args - list(...) if (is.null(arg.aaa - args[["arg.aaa"]] ### 引数 arg.aaa を与えなかったとき ### arg.aaa - default.value (......) } fun(x=1) fun(x=1, arg.aaa="abc") 参照 R
https://w.atwiki.jp/aias-jsstyleguide2/pages/17.html
JavaScriptのデータ型 JSDocへのデータ型の記述は、できるだけ具体的かつ正確に行ってください。我々のサポートする型のスタイルはEcmaScript 4 仕様に基づいています。 JavaScriptの型言語 ES4の提案にはJavaScriptのデータ型を定義する言語が含まれていました。この言語をJSDoc内で用い、関数パラメータや戻り値の型を表現します。 ES4提案の進展に伴い、その型言語も変化しています。Compilerは古い構文もサポートしていますが、現在それらは非推奨となっています。 構文名 構文 説明 非推奨の構文 Primitive Type JavaScriptに含まれる5種類のプリミティブ型 {null}, {undefined}, {boolean}, {number}, {string} シンプルな型名称 Instance Type {Object}Objectのインスタンスもしくはnull{Function}Functonのインスタンスもしくはnull{EventTarget}EventTargetインタフェースを実装するコンストラクタのインスタンスもしくはnull コンストラクタまたはインタフェースのインスタンスであることを表します。コンストラクタ関数は@cpnstructorJSDocタグによって定義されます。インタフェース関数は@interfaceJSDocタグによって定義されます。デフォルトで、Instance Typeはnullを許可します。このタイプはnullを許す唯一のものです。この表に含まれる他の構文はデフォルトでnullを許可しません。 Enum Type {goog.events.EventType}goog.events.EventTypeの列挙値で初期化されたオブジェクトリテラルのプロパティのどれか 列挙型の変数はオブジェクトリテラルもしくは他の列挙型変数の別名で、@enumJSDocタグがアノテートされていなければなりません。このオブジェクトリテラルのプロパティが、列挙値の実体となります。列挙型の構文についてはこちらで定義されています。注意:この型は、我々の型システムのうちES4仕様に含まれない数少ないもののひとつです。 Type Application {Array. string }文字列の配列{Object. string, number }キーが文字列、値が数値のオブジェクト 型引数のセットを付記し、型をパラメータ化します。考え方はJavaのジェネリクスによく似ています。 Type Union {(number|boolean)}数値または論理値 値の型がAまたはBであることを表します。この型が最上位の式で使われる場合、丸括弧は省略しても構いません。しかしそうでない場合は、曖昧さを避けるために丸括弧を付けてください。{number|boolean}{function() (number|boolean)} {(number,boolean)}, {(number||boolean)} Nullable Type {?number}数値またはNULL。 Unionの省略形で、何らかの型もしくはnullであることを表します。この型は糖衣構文です。 {number?} Non-nullable Type {!Object}Object型ですが、nullは許されません。 この型がnullを許容しないことを表します。殆どの場合、デフォルトでnullを許すInstance Typeに対して使用されます。 {Object!} Record Type {{myNum number, myObject}}型指定されたメンバを持つ無名オブジェクト 値が指定された型のメンバを持つオブジェクトであることを表します。左のケースでは、myNumは数値、myObjectはどの型でも取れるプロパティです。波括弧は構文の一部であることに注意してください。例えばArrayがlengthというプロパティを持つオブジェクトの配列であることを示すには、Array. {length} のように書きます。 Function Type {function(string, boolean)}2つの引数(文字列と論理値)を取り、戻り値が指定されていない関数。 関数を定義します。 Function Return Type {function() number}引数を取らず、数値を戻り値として返す関数。 関数の戻り値の型を定義します。 Function this Type {function(this goog.ui.Menu, string)}文字列の引数1つをとり、goog.ui.Menuのコンテキストで実行される関数。 関数のコンテキストの型を定義します。 Function new Type {function(new goog.ui.Menu, string)}文字列の引数を1つ取るコンストラクタ関数。 new キーワードと共にコールされるときにはgoog.ui.Menuのインスタンスを生成します。 コンストラクタによって作成される型を定義します。 Variable arguments {function(string, ...[number]) number}引数として文字列を1つと、可変個数の数値を取る関数。 関数に個数の変化する引数を定義します。 Variable arguments (in @param annotations) @param {...number} var_args可変個数の引数を取るようアノテートされた関数。 可変個数の引数を受け取れるようアノテートされた関数を定義します。 Function optional arguments {function(?string=, number=)}省略可能な、nullでもよい文字列型の引数と、省略可能な数値型の引数を取る関数。=は関数型の宣言の中でのみ使います。 関数の省略可能な引数を定義します。 Function optional arguments (in @param annotations) @param {number=} opt_argument数値型の省略可能なパラメータ。 省略可能な引数を受け取れるようアノテートされた関数を定義します。 The ALL Type {*} その変数がどのような型でも取れることを表します。 The UNKNOWN Type {?} その変数がどのような型でも取れ、Compilerはそれを使った型チェックを行ってはならないことを表します。 JavaScriptで使えるデータ型 型名の例 値の例 説明 number 11.0-51e5Math.PI Number new Number(true) Numberオブジェクト string Hello "World"String(42) 文字列値 String new String( Hello )new String(42) Stringオブジェクト boolean truefalseBoolean(0) 論理値 Boolean new Boolean(true) Booleanオブジェクト RegExp new RegExp( hello )/world/g Date new Datenew Date() null null undefined undefined void function f() { return;} 戻り値なし Array [ foo , 0.3, null][] 型指定のない配列 Array. number [11, 22, 33] 数値の配列 Array. Array. string [[ one , two , three ], [ foo , bar ]] 文字列の配列の配列 Object {}{foo abc , bar 123, baz null} Object. string { foo bar } 文字列の値を持つオブジェクト Object. number, string var obj = {};obj[1] = bar ; キーが数値で値が文字列のオブジェクト。JavaScriptではオブジェクトのキーは暗黙的に文字列に変換される点に注意してください。従ってobj[ 1 ] == obj[1]です。また for...in ループの中でもキーは常に文字列です。しかしCompilerはオブジェクトのキーをインデックス化する際、その型を識別します。 Function function(x, y) { return x * y;} Functionオブジェクト function(number, number) number function(x, y) { return x * y;} 関数 SomeClass /** @constructor */function SomeClass() {}new SomeClass(); SomeInterface /** @interface */function SomeInterface() {}SomeInterface.prototype.draw = function() {}; project.MyClass /** @constructor */project.MyClass = function () {}new project.MyClass() project.MyEnum /** @enum {string} */project.MyEnum = { /** 青色 */ BLUE #0000dd , /** 赤色 */ RED #dd0000 }; 列挙型列挙値に対するJSDocコメントは省略可能です。 Element document.createElement( div ) DOM要素 Node document.body.firstChild DOMノード HTMLInputElement htmlDocument.getElementsByTagName( input )[0] DOM要素の型を明示的に指定します。 型キャスト ある式のデータ型を型チェック機能が正確に推測できないケースでは、型キャストコメントを利用できます。型キャストコメントには@typeアノテーションでデータ型を示し、式は丸括弧で括ります。丸括弧は必須です。 /** @type {number} */ (x) そのパラメータ・プロパティは「Nullを許す」のか「省略できる」のか JavaScriptは型に厳格でない言語なので、関数パラメータやクラスプロパティにおける「nullを許す」、「省略できる」、「undefined」の微妙な違いを理解しておくことは非常に重要です。 クラスとインタフェースのインスタンスはデフォルトでnullを許します。例として、以下の宣言をみてください /** * 何かのクラス、何らかの値で初期化されます。 * @param {Object} value 何かの値。 * @constructor */ function MyClass(value) { /** * 何かの値。 * @type {Object} * @private */ this.myValue_ = value; } 上のコードはCompilerに対し、myValue_プロパティが値として持つのはオブジェクトかnullのどちらかだと伝えています。もし myValue_プロパティが決してnullとならないのなら、こう宣言されるべきです /** * 何かのクラス、nullでない何らかの値で初期化されます。 * @param {!Object} value 何かの値。 * @constructor */ function MyClass(value) { /** * 何かの値。 * @type {!Object} * @private */ this.myValue_ = value; } この場合、もしコードのどこかでMyClassがnull値で初期化されていることをCompilerが検出すると、Compilerから警告が発せられます。 省略されたパラメータはおそらくランタイムによってundefinedとして扱われます。それらがオブジェクトのプロパティに代入されるのであれば、プロパティもまたそれに応じて適切に宣言されていなければなりません /** * 何かのクラス、省略可能な何らかの値で初期化されます。 * @param {Object=} opt_value 何かの値(省略可)。 * @constructor */ function MyClass(value) { /** * 何かの値。 * @type {Object|undefined} * @private */ this.myValue_ = value; } 上のコードはCompilerに対し、myValue_の値はオブジェクトかnull、あるいはundefinedのままであると伝えています。 省略可能なパラメータopt_valueの型が{Object=}と宣言されており、{Object|undefined}ではないことに注意してください。それは、省略可能なパラメータが undefined でありうることが定義上明らかだからです。そのことを明示的に宣言しても不都合はありませんが、本来必要ないだけでなく、コードも読みにくくなってしまいます。 最後に、nullを許すことと省略可能であることは直交的な性質である点に注意してください。以下の4つの宣言は全て異なった意味を持っています /** * 4つの引数を取ります。そのうち2つはnullを許容し、2つは省略可能です。 * @param {!Object} nonNull 必須(undefinedは不可)、nullは不可。 * @param {Object} mayBeNull 必須(undefinedは不可)、nullでもよい。 * @param {!Object=} opt_nonNull 省略可 (undefinedでもよい)、しかし値があるなら、 * それはnullであってはならない! * @param {Object=} opt_mayBeNull 省略可 (undefinedでもよい)、nullでもよい。 */ function strangeButTrue(nonNull, mayBeNull, opt_nonNull, opt_mayBeNull) { // ... }; 型定義 時々、型の指定が複雑になってしまうことがあります。例えば、DOM要素のコンテンツを受け取る関数があるとしましょう /** * @param {string} tagName * @param {(string|Element|Text|Array. Element |Array. Text )} contents * @return {Element} */ goog.createElement = function(tagName, contents) { ... }; @typedefタグを使うと、よく使われるデータ型の組み合わせを1つの型として定義することができます。例えばこうです /** @typedef {(string|Element|Text|Array. Element |Array. Text )} */ goog.ElementContent; /** * @param {string} tagName * @param {goog.ElementContent} contents * @return {Element} */ goog.createElement = function(tagName, contents) { ... }; テンプレート型 Compilerが行うテンプレート型のサポートは限定的です。それは関数リテラル内のthisの型を、thisを指定する引数の型と値の有無から推測するだけです。 /** * @param {function(this T, ...)} fn * @param {T} thisObj * @param {...*} var_args * @template T */ goog.bind = function(fn, thisObj, var_args) { ... }; // おそらくプロパティが存在しないという警告が出力されます。 goog.bind(function() { this.someProperty; }, new SomeClass()); // thisがundefinedであるという警告が出力されます。 goog.bind(function() { this.someProperty; }); 列挙型 訳注:2.28版以降列挙型に関する以下の説明は削除されていますが、コーディングルールの理解には必要と考え記載します。 /** * 3つの状態を値にもつ列挙型。 * @enum {number} */ project.TriState = { TRUE 1, FALSE -1, MAYBE 0 }; 列挙型は有効なデータ型の1つである点に注意して下さい。列挙型はパラメータの型指定などに使用できます。 /** * プロジェクトの状態を設定します。 * @param {project.TriState} state 新しいプロジェクトの状態 */ project.setState = function(state) { // ... };
https://w.atwiki.jp/yukobayashi/pages/16.html
python python/コマンドライン引数の処理 contents contents getopt sample code optparse sample code 実行結果 1. 実行結果 2. 実行結果 3. getopt 引数はsys.argvに入ってくる. option引数の解析はgetopt. getopeの第二引数で、「 」が付くのは値をとる時. shortoptsの時は、引数が1文字の時. lognoptsの時は、長い引数の時. ex.) --help,--width 10のような時 getopt(args, shortopts, longopts=[]) sample code import getopt import sys try optlist.args = getopt.getopt(sys.args[1 ],"f ") except getopt.GetoptError,pe print pe.msg sys.exit(0) for opt,args in optlist if opt in ("-f") print("ok") optparse getoptより処理が楽 sample code infileには読み込むfile outfileには出力するfile よくあるパターンのスクリプト #! /bin/env python import outparse # getfile def getfiles() usage = u %prog [-f infile] [-o outfile] parser = optparse.OptionParser(usage=usage) parser.add_option( -f , --infile , action= store , type= string , help=u input text file , metavar= infile ) parser.add_option( -o , --outfile , action= store , type= string , help=u output text file , metavar= outfile ) options.args = parser.parse_args() # main if __name__ = __main__ getfiles() 実行結果 1. -hの引数でヘルプが出るのだ [$/home/python] ./unko.py -h Usage unko.py [-f infile] [-o outfile] Options -h, --help show this help message and exit -f infile, --infile=infile infile text file -o outfile, --outfile=outfile outfile text file 実行結果 2. -fオプションにちゃんと引数をつけるといいみたいだ [$/home/python] ./unko.py -f unko [] { outfile None, infie unko } 実行結果 3. -oもつけて完成 [$/home/python] ./unko.py -f unko -o test [] { outfile test , infile unko }
https://w.atwiki.jp/akios/pages/69.html
4. 型と値と変数 4.1. 型と変数の種類 4.2. プリミティブ型と値 4.3. 参照型と値 4.4. 型変数 4.5. 引数付き型 4.6. 型の抹消 型の抹消(type erasure)とは型(引数付き型と型変数を含んでもよい)から型(引数付き型や型変数を含まない)へのマッピングです。型Tの抹消を|T|と記します。抹消マッピングを以下に定義します。 引数付き型G T1,...,Tn の抹消とは|G|です。 入れ子にされた型T.Cの抹消とは|T|.Cです。 配列型T[]の抹消とは|T|[]です。 型変数の抹消とはその最も左の制限の抹消です。 他の全ての型の抹消とはその型そのものです。 型の抹消はコンストラクターやメソッドのシグネチャーを引数付き型や型変数を持たないシグネチャーにマップすることも指します。コンストラクターやメソッドのシグネチャーsの抹消とはsと同じ名前を残しs内の他の仮引数の型を全て抹消したものです。 コンストラクターやメソッドの型引数(8.4.4.)やメソッドの戻り型も、そのコンストラクターやメソッドのシグネチャーが抹消されるならば抹消されます。 ジェネリックメソッドのシグネチャーの抹消では型引数を持ちません。 4.7. 具象可能型 4.8. 未加工型 4.9. 交差型 4.10. サブタイプ化 4.11. 型の使用箇所 4.12. 変数
https://w.atwiki.jp/cschola/pages/74.html
第四項 ポインターを使った関数 ポインターは関数の中で使うことで真価を発揮します。 関数の中で使う前にポインターの使い方について復習しておきます。 int* p; //int型ポインターpを宣言。 int num = 0; //int型の変数numを宣言。 p = num; //pにnumのアドレスを格納 *p = 5; //pからアクセスしてnumの値を変更 int a = *p; //pからアクセスしてnumを参照 * と の使い方を覚えてください。 ポインターから変数へアクセスすることで値を変更したり、参照したりできることを覚えてください。 今まで scanf_s関数に変数を渡すときは変数の前に を付けていました。 これは変数のアドレスを渡していたのです。 変数のアドレスを渡すことができれば、scanf_s関数は数値を代入することができます。 変数名の前に を付ける以外にもう一つアドレスを渡す方法があります。 ポインターを宣言し、変数のアドレスを格納して、ポインターを引き数として渡す方法です。 int num = 0; int* p = num; printf("数値を入力してください\n"); scanf_s("%d",p); printf("入力された数値は%dです。\n",num); 整数型の引数を二つ受け取り、それぞれの値を入れ替える Swap関数を作ります。 void Swap(int* x,int* y){ int tmp = *x; *x = *y; *y = tmp; } /*~~~~~~~~~~中略~~~~~~~~~~*/ int a = 20; int b = 10; printf("aは%dです。\n",a); printf("bは%dです。\n",b); Swap( a, b); printf("aとbを入れ替えます。\n"); printf("aは%dです。\n",a); printf("bは%dです。\n",b); 関数の引数に a b と書くことで、変数のアドレスを関数にわたします。 アドレスを受け取るにはポインターが必要です。 この関数では x,y のポインターでアドレスを受け止めています。 アドレスを受け止めた x,y から本体にアクセスします。 本体にアクセスすることで、変数本体の数値を参照、変更できます。 練習問題 次のようなプログラムを作ってください。 第1問 int型変数のアドレスを受け取り、その変数に10を代入する関数を作る。 第2問 int型の変数 flag のアドレスを受け取り、flagの値が0なら1に1なら0にする関数を作る。 第五項 ポインターのポインター ポインターも変数の一種なので、自身もアドレスを持っています。 そのアドレスをほかのポインターに格納することもできます。 int num = 10; int* p = num; int** pp = p; //ポインターのアドレスを格納するポインター(ポインターのポインター) printf("%d\n",**pp); あまり使うことはないですが、ポインターのポインターのポインターも作ることができます。 int num = 5; int* p = num; int** pp = p; int*** ppp = pp; printf("%d\n",***ppp); ポインタの答え
https://w.atwiki.jp/genshiken/pages/25.html
ポインタ ポインタとは ポインタとは、値のアドレスを保持するための変数です。 ポインタの宣言 ポインタ型を表すには、「*」を使います(*はクリーネスターとかいうこともあります)。 int * ptr_int; /* ptr_int は int 型の値へのアドレスを保持するポインタ */ int ** ptr_ptr_int; /* ptr_ptr_int は int 型のポインタのポインタ */ 値とアドレス すべての値にはアドレスが存在します。勿論ポインタにも存在します。 アドレスとはその値の存在する場所を表す整数値です。 アドレスを取り出すにはアドレス演算子「 」を使います。 int num = 0; int *ptr = num; アドレスのさしている値を取り出す時は、間接演算子「*」を使います。 *ptr = 1; /* num には 1 が代入される。ptr 自体は変化しない */ 関数ポインタ 関数のアドレスを保持するポインタを、関数ポインタと呼ぶ。 これにより、関数の実体を持ち運ぶことはできないが、それを擬似的に再現することができる。 (実体を持ち運ぶ必要性はほとんどの場合ないのでこれで充分) int 型の引数を取り、int 型を返す関数のポインタは以下のように宣言される。 int (*func_ptr)(int); 以下のように使用する。 int add_one(int n){ return n + 1; } int (*func_ptr)(int); func_ptr = add_one; int i = (*func_ptr)(1); /* i には 2 が代入される */ 関数のアドレスは、アドレス演算子を使わなくても得る事ができる。 また、関数ポインタ越しに関数を呼ぶこともできるため、上のコードは以下のように書き換えることができる。 func_ptr = add_one; int i = func_ptr(1); 初心者は分からなくてもいいです。 ゲームプログラミングにおいては、タスクシステムなどで使用することはあるものの、なければならないということはないです。