2016-05-22 3 views
-3
int *a[4] = { 
    (int[]){ 1}, 
    (int[]){ -4, -5}, 
    (int[]){ -4, -5, 0}, 
    (int[]){ 1, 3, 4, 6} 
}; 

for (i = 0; i < 4; i++) 
    len = sizeof(a[i])/sizeof(int); 

正しいアプローチではありませんが、lenは常に2です。誰かがlenが2である理由を説明できますか?それは未定義の振る舞いですか、そうでない場合、どのように計算されていますか?配列のlenは常に2

+1

コードに多次元配列がない場合。 – Olaf

+1

ええ、それはポインタの配列です。私は削除するために自分自身の質問にフラグを立てた。 –

+0

あなたは削除する質問に自分でフラグを立てる必要はなく、質問の作成者であるため、実際に削除することもできます。 –

答えて

4

a[i]は、intへのポインタです。 sizeof(a[i])は、それが指す配列ではなく、int *というサイズを返します。 64ビットマシンでは、ポインタのサイズは8バイト、サイズはintです。サイズは4バイトです。 8/4 = 2

+1

ああ、そう。シンプルなものでした。私はなぜそれが私の頭を乱したのではありません。とにかく、ありがとう。 –

関連する問題