配列を関数の引数として値渡ししたい場合

C言語ポインタ完全制覇 1-3-6

通常、配列は関数にそのまま渡すことはできません。関数に渡した時点でポインタ型でしか受け取れないからです。

ですが、構造体を経由すれば可能であるということ。なるほど。

実際にうまくいくか試してみます。

#include <stdio.h>

struct S {
    char array[10];
};

void sfunc (struct S s) {
    s.array[0] = 'A';
}

int main (void) {
    struct S s = {"abc"};
    
    sfunc(s);
    printf("%s",s.array);
    
    return 0;
}
$ main
abc

書き換わってないですね。というか改めて実装してみて思ったんですが別にこれ当然の話ですよね。構造体自体を値渡ししてるんですから。

そもそも配列が値渡しできないのが諸悪の根源といったところでしょうか。