void func1(int a[2][3]) { } void func2(int (&a)[2][3]) { } 配列とポインタと糖衣構文 度々話題になりますが、C/C++言語におけるa[1]のような配列表記は*(a+1)の糖衣構文となっています。 こんな配列宣言があったとします。
void func1(int a[2][3]) { } void func2(int (&a)[2][3]) { } 配列とポインタと糖衣構文 度々話題になりますが、C/C++言語におけるa[1]のような配列表記は*(a+1)の糖衣構文となっています。 こんな配列宣言があったとします。
はじめに 少し前、こんなポストをしました。 これは、C言語において、関数の宣言よりも前に関数呼び出しがあり、かつ引数の型が異なる場合、結果が想定の逆になってしまう、というものです。 この現象の本質は、暗黙のプロトタイプ宣言とABIにあり、以下の記事で説明は尽きています。 Cの可変長引数とABIの奇妙な関係 ですが、先のポストへの反応を見ていると、いまいち何が起きているかが伝わっていないようだったので、簡単に説明しようと思います。 以下、使用コンパイラはGCC 9.3.0、環境はWSL上のUbuntu 20.04です。 現象 まず、この現象はprintf関数が本質ではありません。それを見るため、以下のようなコードを書いてみましょう。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く