プロが教えるわが家の防犯対策術!

ライブラリ関数を勉強しているのですが、
書式にたとえば
callocならvoid *calloc(size_t nmemb, size_t size);
という風に書いていますが、
size_tってなんですか?
書式が読めないと、、、わからないです。
あと最初にvoidと書いていますが、
返ってくるのはポインタなのだから
intじゃないんですか?
お願いします。

A 回答 (2件)

もしプラットフォームがwindowsでVCをお使いであればMSDNを参照してみるのもいい方法だと思います。



確認したところsize_tはunsigned int型のようですね。
STDDEF.Hに以下の記述を見つけました。
#ifndef _SIZE_T_DEFINED
typedef unsigned int size_t;
#define _SIZE_T_DEFINED
#endif

意味が存在しない「型」「数字」に意味をもたせると言う事はプログラムをする上で避けて通れないところだと思います。
(unsigned intと書いてあるよりはsize_tと書いてあるほうが「見た目に解りやすい」ですしね。もちろん一番の目的はOSの違いを吸収するためでしょう)

また、
void * calloc(size_t nmemb, size_t size);

* calloc();
こうすると理解しやすくありませんか?
ポインタ(*)が返される関数。但し、ポインタが指し示す先は未定義(void)。
尚更解りにくくしてしまったらすみません。
    • good
    • 1

size_tは、メモリ量のサイズを表すための型です。


stdio.hとかstdlib.hで定義されています。
sizeof演算子がこの型の量を返します。

ついでながら、この手のものを調べるために、
下記の本のどちらかは絶対に買っておきましょう。

メモリの量を表現するのに、intで十分な場合もあれば
longが必要な場合もある(可能性がある)ので、
その違いを吸収するために存在しています。

あと、voidとvoid *型は違います。
前者は値を返さない印ですが、
void *は、ポインタを返します。「特に何の型へのポインタでもないポインタ」です。
たとえばint *を返すと、int *以外のポインタで使うときに
変換しなければならないから面倒。
void *は、char *型やint *型などのポインタに自由に代入できます。

参考URL:http://www.amazon.co.jp/exec/obidos/ASIN/4774104 …
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!