«Bool *» из «int» делает указатель из целого числа без приведения?

#c #pointers #boolean #warnings #hashtable

Вопрос:

Я продолжаю получать это предупреждение в своей компиляции следующего кода, в котором говорится, что «присвоение» _Bool «из» int «делает указатель из целого числа без приведения «в» *result = true; «, и я понятия не имею, что это значит. Как я могу решить эту проблему? Он проходит все мои тесты.

Сообщение об ошибке

 char *hash_table_lookup(hash_table_t *ht, int key, bool **result)
{
  /// Find the previous entry for key
  entry_t *tmp = find_previous_entry_for_key(amp;ht->buckets[key % No_Buckets], key);
  entry_t *next = tmp->next;

  if (next amp;amp; next->value)
  {
    *result = true;
    return (next->value);
  }
  else  
  {
    *result = false;
  }
}

 

Он тестируется следующим образом

 void test_lookup1()
{
   hash_table_t *ht = hash_table_create();
   char *valtest = "a";
   int keytest = 12;
   hash_table_insert(ht, keytest, valtest);
   bool *resu<
   hash_table_lookup(ht, keytest, amp;result);
   CU_ASSERT_TRUE(result);
   hash_table_destroy(ht);
}
 

Комментарии:

1. Ваш result аргумент-это двойной указатель ( bool **result ), так *result же как и указатель ( bool* ). Вы пытаетесь присвоить false или true (оба целых типа в C, если вы используете <stdbool.h> заголовок) этому указателю. Для формального/более полного ответа (включая исправление) нам нужно будет увидеть больше кода, например, что вы делаете с result аргументом и что вы передаете в качестве этого аргумента.

2. result является указателем на указатель. Когда вы разыменовываете его с *result помощью, вы все равно получаете указатель на bool , которому вы присваиваете целое число. Почему result ему нужно иметь тип bool ** ?

3. На данный момент мое «лучшее предположение» состояло бы в том, что эти два ** — опечатка … но это только предположение.

4. Почему эта result переменная должна быть указателем? Конечно, вы хотите получить прямое bool возвращаемое значение в качестве сигнала прохождения/сбоя и просто передать bool* result функцию?

5. Пожалуйста, не публикуйте текстовые изображения. Вместо этого непосредственно скопируйте и вставьте свой текст (код, ввод и вывод) в вопрос.