2012-03-18 11 views
16

sizeofを使用してCでポインタのサイズを取得するにはどうすればよいですか?私はポインタを格納するメモリをmallocしたい(値は指さない)。Cのポインタのサイズを取得

+5

AFAIK、異なる型へのポインタは、同じサイズを持つことが保証されていません。 – SLaks

+0

本当ですか?あなたは例/ソースを提供できますか?私は常に同じアドレス空間内のメモリ位置を参照しているので、すべてのポインタが同じサイズであると仮定しています。 – Matt

+4

@Matt:簡単な反例は関数ポインタです。必ずしも同じアドレス空間である必要はありません。参照:http://stackoverflow.com/questions/916051/are-there-are-any-platforms-where-pointers-to-different-types-have-different-siz。 –

答えて

27

:あなたがいずれかを使用することができます

char *p; 

をこれらの式のうち、

sizeof(p) 
sizeof(char *) 

先頭には、malloc() cal以下のようなL:ppc変更の種類は、表現が正しいスペースを割り当てた場合

char **ppc = malloc(sizeof(char *)); 
char **ppc = malloc(sizeof(p)); 
char **ppc = malloc(sizeof(*ppc)); 

は、最後のバージョンはその中にいくつかの利点があります。

+4

最初の式ではかっこは省略可能です。 –

+3

@CarlNorum真実ですが、表現がはっきりとわかります。それはスタイルの問題であり、編集すべきではありません。 –

+2

+1は、最後のバージョンが優先されることを識別します。 –

11

これはトリックを行う必要があります。

任意のタイプ(私はここ charを選択したが、それは具体的な例示のためである)を考えると
sizeof(void*) 
1
char *ptr; 
char **ptr2 = malloc(sizeof(ptr)); 

あなたの目的を達成できるはずです。プラットフォームが何であっても、このコードは機能するはずです。

関連する問題