[解決済み】配列名はポインタですか?
質問
C言語では配列の名前はポインタになるのですか? そうでない場合、配列の名前とポインタ変数の違いは何ですか?
どのように解決するのですか?
配列は配列、ポインタはポインタですが、多くの場合、配列名は 変換される をポインタに変換します。よく使われる言葉として、それらは 崩壊 をポインタに変換します。
ここに配列があります。
int a[7];
a
は7つの整数を入れるスペースがあり、このように代入でそのうちの1つに値を入れることができます。
a[3] = 9;
以下はポインタです。
int *p;
p
は整数のためのスペースを含まないが、整数のためのスペースを指すことは可能である。たとえば、配列のいずれかの場所を指すように設定することができます。
a
といった具合に。
p = &a[0];
紛らわしいのは、こうも書けることです。
p = a;
これは
ない
配列の内容をコピーします。
a
をポインタ
p
(それが何を意味するかはともかく)。その代わり、配列名
a
はその最初の要素へのポインタに変換されます。つまり、その代入は前のものと同じことをするのです。
これで
p
を配列と同じような方法で使用することができます。
p[3] = 17;
これがうまくいくのは、C言語の配列再参照演算子が
[ ]
は、ポインタで定義されています。
x[y]
の意味は、ポインタ
x
ステップ
y
要素をポインタの指す先に進め、そこにあるものを取得します。ポインターの演算構文を使って
x[y]
は次のように書くこともできます。
*(x+y)
.
これを通常の配列で動作させるには、たとえば
a
という名前の
a
で
a[3]
の最初の要素への)ポインタに変換する必要があります。
a
). そして、3要素進んで、そこにあるものをすべて取ります。つまり、配列の3の位置にある要素を取り出します。(最初の要素は0番なので、配列の4番目の要素です)。
つまり、C言語のプログラムにおける配列名は、(ほとんどの場合)ポインタに変換されるのです。例外は
sizeof
演算子を使用します。もし
a
はこのコンテキストでポインタに変換されました。
sizeof a
は実際の配列のサイズではなくポインタのサイズを与えることになり、これはかなり無駄なことです。したがって、その場合は
a
は配列そのものを意味します。
関連
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み] struct で "warning: useless storage class specifier in empty declaration" (警告: 空の宣言での無駄なストレージクラス指定子)
-
[解決済み] [Solved] .Cファイルをコンパイルしています。アーキテクチャ x86_64 の未定義シンボル
-
[解決済み】エラー:不明な型名'bool'
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み】JavaScriptで配列の要素を削除する - delete vs splice
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラー。"変数サイズのオブジェクトが初期化されていない可能性がある"
-
[解決済み] c - 初期化がキャストなしでポインタから整数を作る、さらに2つのコンパイラーエラー
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】 error: too few arguments to function `printDay' (C言語)
-
[解決済み】 strcpyとstrdupの比較
-
[解決済み】式は変更可能なL値でなければならない
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み】C言語でpow( )への未定義参照、math.hを含むにもかかわらず【重複】。