[解決済み] ダブルポインタのデリファレンス
2022-02-11 01:49:19
質問
あるコードスニペットがあるのですが、二重の参照を行う行があるため、どのように動作するのか理解することができません。そのコードは次のようなものです。
void afunction(int**x){
*x = malloc(2 * sizeof(int));
**x = 12;
*(*x + 1) = 13;
}
int main(){
int *v = 10;
afunction(&v);
printf("%d %d\n", v[0], v[1]);
return 1;
}
pointer to pointerの最初の要素が値12を取得することは理解できるのですが、そのあとの行がどうしても理解できないのです。最初のポインタの2番目の要素は値13を取得するのでしょうか?
どのように解決するのですか?
一時的な変数を使用することで、コードを理解するのは簡単です。
void afunction(int**x)
{
int* t = *x;
t = malloc(2 * sizeof(int));
*t = 12;
*(t+1) = 13;
}
ということで
-
x
へのポインタです。int
-
*x
を収めます。int*
(へのポインタ)。int
) -
**x =
というのは*(*x) =
へのポインタを取得します。int
そして、デリファレンスによって、そのアドレスに値を設定することができます。
最後の部分
*(*x+1) =
は分解することができます。
int* pointerToIntArray = *x;
int* secondElementInArray = pointerToIntArray + 1;
*secondElementInArray = 13;
ここでポインタからポインタへのポインタを使う目的は、アドレスを
int*
を関数に渡して、関数にメモリを確保させ、データを入れさせることができます。同じ目的は
int*
, eg:
int* afunction() {
int* x = malloc(sizeof(int)*2);
*x = 12;
*(x+1) = 13;
return x;
}
int main() {
int* v = afunction();
return 0;
}
関連
-
[解決済み】Valgrind - strcpyのサイズ1の無効な書き込み
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】警告。この関数ではXが初期化されていない状態で使用される可能性があります。
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み] テスト
-
[解決済み】なぜか。"エラー: 配列型を持つ式への代入"
-
[解決済み】エラー:呼び出されたオブジェクトは、関数または関数ポインタではない
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Valgrind が "Invalid write of size 8" で文句を言う。
-
[解決済み] (.text+0x20): `main'への未定義の参照と関数への未定義の参照
-
[解決済み】式は、単純なポインタ演算を使用して完全なオブジェクト型へのポインタでなければなりません【重複】。
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み】ヒープ割り当てで初期化されていない値が作成された
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み】C言語のフォーマット文字列でデータ引数が使用されない [重複]。
-
[解決済み] '{'トークンの前に期待される式
-
[解決済み] エラー: `itoa` はこのスコープで宣言されていません。