[解決済み] C言語でのポインタ:アンパサンドとアスタリスクはいつ使うのか?
2022-03-14 22:21:40
質問
ポインターを使い始めたばかりで、少し戸惑っています。私は知っています
&
は変数のアドレスを意味し
*
は、ポインター変数の前で使用すると、ポインターが指すオブジェクトの値を取得することができます。しかし、配列や文字列を扱うときや、変数のポインタコピーを使って関数を呼び出すときは、状況が違ってくる。このように、論理のパターンを見出すのは難しい。
どのような場合に
&
と
*
?
解決方法は?
ポインタと値を持っている。
int* p; // variable p is pointer to integer type
int i; // integer value
でポインタを値に変換します。
*
:
int i2 = *p; // integer i2 is assigned with integer value that pointer p is pointing to
で値をポインタに変換します。
&
:
int* p2 = &i; // pointer p2 will point to the address of integer i
編集する
配列の場合、ポインタと非常によく似た扱いを受けます。 ポインタとして考えると
*
を使用して中の値を取得する方法もありますが、より一般的な方法として
[]
演算子を使用します。
int a[2]; // array of integers
int i = *a; // the value of the first element of a
int i2 = a[0]; // another way to get the first element
2番目の要素を取得する。
int a[2]; // array
int i = *(a + 1); // the value of the second element
int i2 = a[1]; // the value of the second element
そのため
[]
インデキシング演算子は
*
演算子で、次のように動作します。
a[i] == *(a + i); // these two statements are the same thing
関連
-
関数 'malloc' の暗黙の宣言に対する解決策
-
C 言語のポインタ配列のポインタ型、ポインタに値を割り当てるために配列名を使用、コンパイル時の警告:互換性のないポインタ型からの初期化
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] なぜ16進数には0xがつくのですか?
-
[解決済み] リファレンスとポインタの使い分け
-
[解決済み] LD_PRELOADのトリックとは何ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib: NSException タイプの捕捉されない例外で終了するエラー
-
未定義の `__isoc99_sscanf' への参照
-
[解決済み] C 言語で const char* を char* に変換するには?
-
[解決済み] Linuxカーネルにおけるcontainer_ofマクロの理解
-
[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] なぜalloca()の使用はグッドプラクティスとみなされないのでしょうか?
-
[解決済み] 2次元配列の反復処理において、ループの順序がパフォーマンスに影響するのはなぜですか?
-
[解決済み】ポインターを理解するための障壁と、それを克服するためにできることは?[終了しました]