私はsimilar questionへの答えを赤色にしていますが、この問題は広範囲かつ厳密に議論されています。私は彼らに与えた正しい解釈を確実にしたいと思います。例えばタイプ、式、配列の次元
、のsizeofオペレータがタイプまたは式を格納するのに必要なバイト数を見つけるために使用することができる」という。配列に適用すると、運動6.24で私のtextbook状態、、、それはがありません配列のサイズを返します。 "
#include<stdio.h>
void f(int *a);
int main(){
char s[] = "deep in the heart of texas";
char *p = "deep in the heart of texas";
int a[3];
double d[5];
printf("%s%d\n%s%d\n%s%d\n%s%d\n",
"sizeof(s) = ", sizeof(s),
"sizeof(p) = ", sizeof(p),
"sizeof(a) = ", sizeof(a),
"sizeof(d) = ", sizeof(d));
f(a);
return 0;
}
void f(int *a){
printf("In f(): sizeof(a) = %d\n", sizeof(a));
}
それでも、それは私には明らかではありません。したがって、私は簡単にあなたと出力を議論したいと思います:
sizeof(s) = 27
sizeof(p) = 8
sizeof(a) = 12
sizeof(d) = 40
In f(): sizeof(a) = 8
その後
:この場合
sizeof(s) = 27
、27
している、各char
で構成されていることs
のバイト数で構成され1バイトのこれは配列の_size_のように見えるので、sizeof
の定義とは対照的に現れます。この時点で、char s[] = "deep in the heart of texas"
がの式とみなされていると思っていますか?
sizeof(p) = 8
ここでは、ポインタchar *
があります。 sizeofは "型を格納するのに必要なバイト数を見つける"ので、ポインタchar *
は8バイトのメモリに格納されていると仮定します。私は正しいですか?
sizeof(a) = 12 and In f(): sizeof(a) = 8
この場合、私は特に不明です。私が見つけた唯一の相違点は、f()
の配列a
がparameter:そのベースへのポインタとして渡されていることです。前述のように、ポインタは8バイトのメモリに格納されます。私は正しいですか?その場合、12
は式int a[3]
を格納するのに必要なメモリ量と見なす必要がありますか?
sizeof(d) = 40
再び、8
バイト毎の5つのセクションである配列d
の寸法を返すように見えます。しかし、やはり配列のことではなく、式double d[5]
を考えています。それが正しいか?
あなたの知識と経験を私に教えてくれてありがとう!私はここにすべての読み取りをしませんでしたが、テキストの
私はあなたが提案した質問の重複として質問を考えなかった。なぜなら、彼らはそれほど多くの研究努力を示しておらず、表現について話をしていないということです。おそらく私は間違っています。この場合、私は次回はもっとうまくやりたいと思います。どんな提案も高く評価されます。 – Worice
"配列に適用すると、配列のサイズは得られません" - 通常、配列の "サイズ"について誰かが語ったとき、配列内の要素の数を意味します。このことを理解した上で、その陳述は正しい。 'char'の配列では、配列のサイズが配列を格納するのに必要なバイト数である場合もありますが、他の型の場合はそうである必要はありません。 –
@DavidBowlingそれは貴重なpunctualizationです、ありがとう! – Worice