1

私は C/C++ が初めてです。

ツリーに関連するコーディングの質問をいくつか行っていたところ、この二重ポインター表記に出くわしました。以下の関数の最初の引数として単一ポインターを使用して、二重ポインターでできるのと同じことを行うことができますか。

void operate(struct Node *root, struct Node **head_ref){ //do something}
4

3 に答える 3

0

malloc を処理する関数が必要な場合、free が主な理由です。

これは、メモリ割り当てをカプセル化する場合に役立ちます。

たとえば、init(struct some_struct **)、free(struct some_struct **) などです。そして、関数が malloc、free を処理するようにします。スタックに割り当てる代わりに。

たとえば、長さが不明な文字列をパックする関数。

   size_t pack_struct(char** data, const struct some_struct * some_struct)
   {
   /**
    * @brief buffer
    * @note verify the needed buffer length
    */
   char buffer [256]; // temporary buffer

   *data = 0;

   //const char* package_pattern = "%cW ;%u.%u;%s%c";
   size_t len = sprintf(buffer,  weight_package_pattern,
                    START_CHARACTER,                    
                    some_struct->ts.tv_sec,
                    some_struct->ts.tv_usec,
                    some_struct->string_of_unknown_length, // but no more then buffer
                    STOP_CHARACTER);

  if(len == 0) {
    perror("sprintf failed!\n");
    return len;
   }

  // len++; // for end character if wanna some, see sprintf description

  *data = (char*)malloc(len*sizeof(char)); // memory allocation !
  strncpy(*data, buffer, len);

  return len;
}

ただし、C++ でプログラミングする場合は、このような手法を避ける必要があります。

于 2013-10-18T05:31:34.033 に答える