1

次の構造体があるとします。

typedef struct elementT {
  int value;
  struct element *next;
} element;

行うことの違いは何でしょうか:

element *newElem;
newElem = malloc(sizeof(element))

そしてこれを行う:

element *newElem;
newElem = (element *) malloc(sizeof(element))

私の観点からすると、最初のケースでは次のことを行っています。

element *newElem;->要素タイプを含むアドレスへのポインタを作成します。 newElem = malloc(sizeof(element))->そのポインタをmallocの結果を指すようにします。

なぜ(要素*)を実行する必要があるのですか、それともなぜそれが役立つのですか?

ありがとう

4

1 に答える 1

1

void *これは、実際には許可されていなかった古いスタイルCからのものであるため、すべてが返されますchar *。これにより、互換性のないポインタータイプを割り当てていることを示す警告がコンパイラーに生成され、キャストはこの警告を取り除くための単なる方法でした。新しいコンパイラは、あなたが何をしようとしているのかを知っており、キャストを不要にします(Linuxカーネルのvmalloc関数などの特定の状況を除く)。

于 2013-01-15T21:36:25.877 に答える