Как int * bool в C #? - PullRequest
       41

Как int * bool в C #?

3 голосов
/ 23 января 2011

Я пытаюсь использовать указатели в C #, как в C.

public static void Main(string[] args)
    {
        unsafe
        {
            int i = 5;
            int* j = &i;
            Console.WriteLine(j);  //cannot convert from 'int*' to 'bool'
        } 

    }

У меня есть два запроса относительно этого кода:

  1. Как скомпилировать с / unsafe?
  2. Почему Console.Writeline(j) пытается конвертировать j to bool?

Ответы [ 3 ]

11 голосов
/ 23 января 2011

Точка 2) выполняется в 2 этапа:

  • Console.WriteLine() не перегружен для int*
  • По-видимому, он пытается выполнить первую перегрузку WriteLine(bool value)найти преобразование

Я бы назвал это слабым сообщением об ошибке.

Чтобы напечатать адрес, сначала приведите его к ulong.

3 голосов
/ 23 января 2011
  1. При использовании csc добавьте / unsafe;или в vs проекте, перейдите в свойства проекта и установите флажок
  2. Просто он не может найти лучшего соответствия;Я должен был бы проверить спецификацию для точных правил заказа, но просто обработать это как компилятор, говорящий «нет подходящего соответствия, я предполагаю это, но это тоже не работает»
2 голосов
/ 23 января 2011

Запись значения указателя не имеет смысла, это просто случайный адрес. Вы инициализируете указатель с адресом переменной в стеке, такой адрес не повторяется хорошо. Вы хотите разыменовать указатель с помощью оператора *. Как это:

        Console.WriteLine(*j);

Который записывает указанное значение, 5 в вашем случае.

...