前提・実現したいこと
C++でできたパッケージツールの中にすでに関数が定義されており、
その中に アウトプット変数に、二重ポインタが定義されておりました。パッケージツールなので、関数の中にどのようなコードがあるのか不明なのですが、アウトプットとして、int * と tag_t **が返されます。
この関数を使うためにどのように変数を定義すればよいのでしょうか。
変数宣言時は、
int num_of_references;
tag_t ist_of_references[100];
と宣言する必要があるのですが、通常でしたら、下記のように宣言し関数に渡す必要があると思いますが、下記ではだめなようです。
int* num_of_references;
tah_t ** list_of_references
この理由が分かる方がおりましたら、回答を頂けないでしょうか。
ソースコード
int function Name(tag_t folder_tag,
FL_sort_criteria_t sort_criteria,
int * num_of_references,
tag_t ** list_of_references
)
// output : int * num_of_references
// output : tag_t ** list_of_references
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+2
初心者マークもついてないのでざっくり書くと
関数に値を渡しても関数内で得た値を結果として引数から受け取ることができないからです。
関数内で処理した結果を引数からもらおうとしたら
受け取りたい変数のアドレスを関数に渡してあげる必要があります。
int function Name(tag_t folder_tag,
FL_sort_criteria_t sort_criteria,
int * num_of_references,
tag_t ** list_of_references
)
上記のような関数であるなら使うときは以下のようになります
tag_t folder_tag;
FL_sort_criteria_t sort_criteria;
int num_of_references;
tag_t list_of_references[100];
int return = functionName(
folder_tag,
sort_criteria,
&references,
&list_of_references
);
※補足
キーワード「値渡し 参照渡し ポインタ渡し」で検索してみると
いろいろ資料が出てくると思います
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
>int num_of_references;
>tag_t ist_of_references[100];
>と宣言する必要があるのですが、
関数が int * num_of_references
で受け取りたいと要求していて
手元に int num_of_references;
で宣言された変数がありそれを渡したいのなら
関数に渡す時の記載は&num_of_references
でしょう
同様に tag_t ** list_of_references
と要求していて tag_t list_of_references[100];
があるなら
関数に渡す時の記載は &list_of_references
でしょうかね
通常関数に渡すのは「値」なので呼びだされた側で受け取った引数を変更しても呼び出し側には何の影響もないため値が格納されているアドレスを渡す事で、そのアドレスの中身を書き換えたら呼び出し元でもその影響(結果)を受け取れるという事ができます
つまり num_of_references のアドレス &num_of_references
を渡す事で相手先ではそのアドレスの中に値を入れる事ができ戻ってきた後に呼び出し元で num_of_reference を参照すると相手先で格納してくれた値が受け取れる(参照できる)という理屈です
(ついでの補足)
void test1(int a) {// 引数でaの値を受け取る
a = 100;// a の値を100に変更するけどその結果は呼び出し元には影響しない
}
void test2(int *a) {// 引数でaのアドレスを受け取る
*a = 200;// 引数で受け取ったアドレスが指しているaの中身を200に変更するので呼び出し元に影響する
}
void sample() {
int a = 10;// aの値は10
test1(a);// 10を渡す
printf("%d\n", a);// test1 の中でaが100に変更されているけど呼び出し元のここではaは10のまま変化ないので10と表示される
test2(&a);// 値が変化していない10が入ってるaのアドレスを渡す
printf("%d\n", a);// test2 の中でaの値が200に変更されたので呼び出し元のここではaは200になっているため200と表示される
}
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
先に回答をされている方がいたので削除しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.37%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/03/31 20:20
検索し、自分が分からない点が明確になりました。