次に、sizeof
などの組み込み関数を使用してポインタ配列のサイズを調べるにはどうしたらよいですか?
言語をライブラリと混同しないでください。 sizeof
は機能ではなく、malloc
は組み込まれていません。
Cでは、sizeof
は、演算子であり、関数ではありません。あなたはsizeof
に変数を渡しますが、表現していないので、
size_t size = sizeof(void*);
:(。あなたはそれを宣言する必要はないことに注意してください)あなたのようなことを言うことができます。式には型があり、すべての型にはサイズがあります。greeting
はタイプchar[6]
を持っているので
あなたは
char greeting[] = "hello";
size_t len = sizeof greeting;
len
言い6です。 sizeof
は演算子であるため、かっこは不要です。括弧は通常、オペレータ優先順位の問題を避けるためにのみ使用されます。
C標準ライブラリには、割り当てられたブロックのサイズを返すためにmalloc
とfree
、ない(我々はそれを呼び出すもの)size_of
関数を定義します。実装はにこのような機能を提供できます。ヒープを維持するのと比べて、技術的には簡単です。
なぜ「size_of
」が一般的に提供されていないのですか?それほど必要ではないので、私は言うだろう。 memset
のような関数はメモリ全体のブロックで動作することがありますが、部分ブロックに対しても便利です。ブロック内のバイト数は、それに含まれる上位要素の数(struct
、さらにはちょうどint
)よりも面白くないことがよくあります。 10年後に設計されたC++ STLアルゴリズムもコレクション全体では動作しませんが、開始引数は&です。
'malloc()'に渡される引数はポインタ*オブジェクト*ではなくポインタ*値*です。 'primary'と' secondary'は同じ値を持つので、 'malloc()'に渡すと同じ効果があります。 –
新しい最後の段落が新しい質問をします。あなたの元の質問に答えました。私は新しい質問を投稿することを自由に感じます(しかし、最初に重複をチェックします;私は以前に尋ねられたと確信しています)。 –
ありがとう、余分な質問を削除しました。 – hazrmard