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つは等価で、「ポインタへのポインタ」
呼び出し元と方が合わないのでコンパイルエラー
ダブルポインタ
参考サイト:ダブルポインタ - 滴了庵日録
| 方法 | 説明 |
|---|---|
| 値渡し | 呼び出し元に変化なし |
| ポインタ渡し | 呼び出し元の値を変更可。参照に変化なし 配列を渡して各値を変更可 |
| ダブルポインタ渡し | 呼び出し元参照も変更可。 ポインタ配列を渡して各参照も変更可 |
コメント