c言語:つまづき

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
c言語:つまづき [2022/11/29 23:44] – 削除 - 外部編集 (Unknown date) 127.0.0.1c言語:つまづき [2025/04/12 05:15] (現在) – 外部編集 127.0.0.1
行 1: 行 1:
 +# C言語
  
 +##### constおよびポインタの関係
 +
 +以下の場所によって「const」と「*」によって変更不可となる部分が異なる
 +
 +- const char*
 +
 +- char* const
 +
 +- const char* const
 +
 +##### 2次元配列を関数に渡す
 +
 +参考サイト:[[https://lipoyang.hatenablog.com/entry/20130829/p2|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つは等価で、「ポインタへのポインタ」
 +
 +呼び出し元と方が合わないのでコンパイルエラー
 +
 +##### ダブルポインタ
 +
 +参考サイト:[[https://lipoyang.hatenablog.com/entry/20130829/p1|ダブルポインタ - 滴了庵日録]]
 +
 +^ 方法         ^ 説明                                  ^
 +| 値渡し        | 呼び出し元に変化なし                          |
 +| ポインタ渡し     | 呼び出し元の値を変更可。参照に変化なし\\ 配列を渡して各値を変更可  |
 +| ダブルポインタ渡し  | 呼び出し元参照も変更可。\\ ポインタ配列を渡して各参照も変更可    |