[解決済み] int (*p)[10]=s と int (*o)[5]=&s の違いは何ですか?
2022-02-15 21:46:52
質問
int (*o)[5]=&s; という規則に基づいて、ポインタoが5つの要素を持つ配列を指すのは正しい方法ですか?
また、このsは次のように記述することもできます。
int (*p)[10]=s;
が、なぜ
&s at int (*o)[5]=&s;
のように、どちらも同じ出力を返します。
#include <stdio.h>
int main()
{
int s[5]={10,1,2,3,4};
int (*p)[10]=s;
printf("%d\n",*p);
printf("%d\n",**p);
printf("%d\n",&s);
printf("\n");
int (*o)[5]=&s;
printf("%d\n",*o);
printf("%d\n",**o);
printf("%d",&s);
return 0;
}
このプログラムの出力は
-593812272
10
-593812272
-593812272
10
-593812272
解決方法は?
この行
int (*p)[10]=s;
は不正解です。イニシャライザの型は
int *
を暗黙のうちに変換するため、配列指定子
s
をその最初の要素へのポインタに変換します。そして、左手と右手の2つのポインタは互換性がありません。だから、コンパイラはメッセージを出すべきだ。
この行
int (*o)[5]=&s;
が正しいです。イニシャライザーの型は
int ( * )[5]
これは、初期化されたポインタ
o
.
ポインタの値を出力するには、変換指定子を使用しなければならないことに注意してください。
%p
. そうでない場合は、変換指定子
%d
を使用してポインタを出力すると、未定義の動作が発生します。
そのため、例えば以下のような呼び出しの代わりに
printf("%d\n",*o);
//...
printf("%d",&s);
を書く必要があります。
printf("%p\n", ( void *)*o);
//...
printf("%p\n", ( void * )&s);
式は
*o
は、配列
s
は暗黙のうちに最初の要素へのポインタに変換されます。
式の値は
*o
という式と
&s
は、配列が占めるメモリ領域のアドレスなので、同じです。しかし、その型は異なっている。の呼び出しの引数として使用される最初の式は,配列が占めるメモリ領域のアドレスであるため,同じである。
printf
は、型が
int *
一方、2番目の式は
int ( * )[5]
.
関連
-
[解決済み] Twigでの出力配列
-
[解決済み] GCCです。配列型に不完全な要素型がある
-
[解決済み] static_cast, dynamic_cast, const_cast, reinterpret_cast はいつ使うべきですか?
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み】C/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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IndexError: Index 10 is out of bounds for axis 0 with size 10
-
[解決済み] 配列から要素を1つだけ値で削除する方法
-
[解決済み] Swift Closuresの$0と$1の意味は何ですか?
-
[解決済み] 配列から要素を1つだけ値で削除する方法
-
[解決済み] jsonに複数の値を1つのキーで格納する
-
[解決済み] MASMアセンブリの配列 (非常に混乱している初級者)
-
[解決済み] 最大和サブアレイのブルートフォースはなぜO(n^2)なのか?
-
[解決済み] 選択ソートが安定する理由と不安定な理由
-
[解決済み] GCCです。配列型に不完全な要素型がある
-
[解決済み] Powershellで配列の値をソートする