c言語:つまづき

C言語

constおよびポインタの関係

以下の場所によって「const」と「*」によって変更不可となる部分が異なる

  • const char*
  • char* const
  • const char* const
2次元配列を関数に渡す

参考サイト:2次元配列を関数に渡すとき - 滴了庵日録

int func (???)
{
  (hogeを使った処理)
  ・・・
}

int main(void)
{
   int hoge[4][3] = { 0 };
   func(hoge);
}

この時、「???」に何を渡せばよいかというと、

正解

  • (*hoge)[3]
  • (hoge[][3]
  • hoge[4][3]

3つは等価で、「(サイズ3の配列)へのポインタ」

間違い①

  • (*hoge)[]
  • hoge[][]
  • hoge[4][]

以上の3つは等価で、「(サイズ不明の配列)へのポインタ」

サイズが不明なのでアドレスを計算できず、コンパイルエラー

間違い②

  • **hoge
  • *hoge[]
  • *hoge[3]

以上の3つは等価で、「ポインタへのポインタ」

呼び出し元と方が合わないのでコンパイルエラー

ダブルポインタ

参考サイト:ダブルポインタ - 滴了庵日録

方法 説明
値渡し 呼び出し元に変化なし
ポインタ渡し 呼び出し元の値を変更可。参照に変化なし
配列を渡して各値を変更可
ダブルポインタ渡し 呼び出し元参照も変更可。
ポインタ配列を渡して各参照も変更可
コメントを入力:
 
  • c言語/つまづき.txt
  • 最終更新: 2022/11/29 23:44
  • by 白くじら