2017-03-09 22 views
0

malloc()関数は、ヌルポインタまたは割り当てられた領域へのポインタを返すと言われています。私たちは文を作るための文字列としますmalloc()関数の復帰

char* ptr = malloc(size) 

は、ポインタを指すポインタですptrはありませんか?
ではありません:char型へのポインタを宣言するための正しい方法であるはず

char** ptr = malloc(size) 

しかし、コンパイラは警告を出さず、使用されている場合はフォーマット指定子に対する警告が表示されます。

私たちはこれをどのように宣言する必要がありますか?また、char **はどのように使用されますか?

+1

@ Jean-FrançoisFabreこれは有効なアップではありません。 –

+1

私はテキストだけでなく、コードを読む必要があります。 –

答えて

3

char *は、charポインタを示します。 Mallocはポインタvoid *を返します(割り当てようとするポインタに自動的に変換されます)。

char **は、char *ポインタを示します。これはポインタへのポインタです。

あなたはchar *がcharにマップであることを持っているマップとしてポインタを考える場合、void *は神秘的な何かにマップされ、char **は、charにつながる別のマップへのマップです。したがって

マップはマップにマップする必要があるため、正しいマップです。

+4

明示的な変換として* cast *の意味と混同しないように、 "キャスト"ではなく "自動的に変換"と言うべきです。 – trentcl

+0

@NomeQueEuLembro、cast **はmalloc()やcalloc()でどのように使用されるのですか?例を挙げてください。 – BumbleBee

+1

ありがとう、@trentcl!一定。 – NomeQueEuLembro

4

いいえ、 'ptr'には 'malloc'によって返されたポインタが含まれます。 に返されたポインタを割り当て、そのアドレスを取っていません。

1
  • *ptrは、しばしば、アレイ または文字列を管理するために使用される文字、へのポインタです。

  • **ptrしばしば
    に使用される文字へのポインタへのポインタであるマトリックス(配列の配列)または文字列配列を管理します。

関連する問題