アラサーからのプログラマー生活

アラサーの新米PGが必死に頑張る成長記録です。あとは旅行とか。

【C言語】二次元配列とポインタについて

こんばんは、堀井です。

今日?昨日?書いたこの記事について進展がありましたので書きますね。

 

 ここで「二次元配列のアドレスを渡した先の関数で、二次元配列として弄ることが出来ない」と言ったようなことを書いたのですが、どうも誤りがあったようです。

 

先の記事を修正するとこんな感じになるようです。

 

※下記のコードはpaiza.IOの環境下で実行した際に期待通りの結果が返ってくることを確認しています

 

#include <stdio.h>

void sub(int hoge[2][4]);        // (int hoge[ ][4])でも可


int main(void){
    int test[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}};

    sub(&test[0][0]);                // sub(test); でも可
    return 0;
}


void sub(int hoge[2][4]){        // (int hoge[ ][4])でも可
    for (int i = 0; i < 2; i++){
        for (int j = 0; j < 4; j++){
            printf("%d", hoge[i][j]);
        }
    }
}

配列先頭のアドレスを引数にして、それをそのまま配列で受け取ることが出来るんですね。

まずないとは思いますが、受け取る際にint hoge[4][2]みたいな形で受け取ることも出来ました。先頭アドレスを渡すだけですから出来ることは出来るのでしょう*1

 


 

そんな感じでのんびり訓練は進んでいます。

もうすぐ課題も完成しますのであとはのびのびとやっていきましょう。

それではまた次回。

*1:エディタによっては警告が出そうですがどうなのでしょうか