2016-07-20 3 views
3

私は2次元配列を伝染性のある一連のバイトとして想像することができます。私の質問は、未定義のビヘイビアを呼び出さずに、明示的キャストで1次元配列として扱うことができますか?2次元配列を1として扱うために定義された振る舞いですか?

次のコードをgccでテストしたところ、正常に動作し、クラッシュしませんでした。スタンダードはそれについて何を言いますか?

int main(void) 
{ 
    char buf[2][5]; 
    strcpy((char *)buf, "link 101"); 
    printf("%s\n", (char *)buf); 
    return 0; 
} 

ただ、私はこれを考える良い理由があります。

+0

Fyiは、「私はこれをこのように考える良い理由がある」 - その理由はおそらくあなたの質問に言及する価値があるでしょう。 – WhozCraig

+1

はい、対応しています。 [多次元配列への一次元アクセス:明確に定義されたC?](http://stackoverflow.com/questions/6290956/one-dimensional-access-to-a-multidimensional-array-well-defined-c)を参照してください。 。 – dxiv

+0

http://stackoverflow.com/questions/27093290/can-an-array-have-trailing-padding – BLUEPIXY

答えて

-1

私は、明示的キャストを使用すると、1次元配列として扱うことができると信じています。

本質的にただ1つのダブルポインタを削除するだけです。このフォームでの明示的なキャストの使用が標準的だと思います。

char ** buf; //equal to char[][] 
(char*) buf; //equal to char[] 
関連する問題