Как вывести указатель на вершину стека?
Не могу вывести указатель на вершину стека
class Stack
{
public int value;
public Stack next;
}
class Program
{
static void Main()
{
Stack head = null;
Stack current = null;
int count = 0;
int size = 10;
int[] N = new int[size];
for (int i = 0; i < size; i++)
{
N[i] = size - i;
current = new Stack();
current.value = N[i];
current.next = head;
head = current;
count++;
}
Console.WriteLine($"There are {count} elements are available at the stack");
current = head;
while (current != null)
{
Console.WriteLine(current.value);
current = current.next;
}
Console.ReadLine();
Console.Write("{0:X}", head);
}
}
Должно выводиться такое, но у меня почему-то не выводится
Вот что выводиться у меня:
Ответы (2 шт):
Так попробуйте
class Stack
{
public int value;
public Stack next;
}
class Program
{
static void Main()
{
Stack first = null;
Stack current = null;
Stack prev = null;
int count = 0;
int size = 10;
int[] N = new int[size];
for (int i = 0; i < size; i++)
{
N[i] = size - i;
current = new Stack();
if (first == null) {
first = current;
}
current.value = N[i];
if (prev != null) {
prev.next = current;
}
prev = current;
count++;
}
Console.WriteLine($"There are {count} elements are available at the stack");
current = first;
while (current != null)
{
Console.WriteLine(current.value);
current = current.next;
}
//Console.ReadLine();
Console.Write("{0:X}", first.value);
}
}
Внимание! C# по умолчанию предполагает то, что с ним нужно работать в безопасном режиме (CLR гарантирует безопасный доступ к памяти). Поэтому следует понимать, что в C# не принято говорить терминами С++ указатель, адрес, ссылка и т.п.
Судя по консольному выводу, который вы ожидаете, кусок кода был взят из C/C++ и перенесен на C#.
В C# чтобы получить адрес объекта, нужно настроить сборку проекта, разрешив небезопасный код (правой клавишей по проекту -> Properties -> Build -> Поставить галочку напротив пункта Allow unsafe code), после чего можно сделать что-то подобное:
internal static class Program
{
public static unsafe void Main()
{
Stack head = null;
//... Ваш код по созданию стека без изменений.
var headRef = __makeref(head);
var headAddress = **(IntPtr**)(&headRef);
Console.WriteLine(headAddress.ToString("x"));
// Пример вывода: 1d03d95b7b0
}
}

