public void Run() { TestPointer t = new TestPointer(); t.RunTestPointer(); //Wskaźniki i bufory o ustalonym rozmiarze mogą zostać użyte tylko w kontekście słowa kluczowego „unsafe” int x = 10; int y = 100; Console.WriteLine("x={0}; y={0}", x, y); unsafe { swap(&x, &y); } Console.WriteLine("x={0}; y={0}", x, y); fixedIntBuffer b = new fixedIntBuffer(); for (int i = 0; i < 1024; i++) { unsafe { *(b._buffer + i) = 1024 - i; } } for (int i = 0; i < 1024; i++) { unsafe { Console.WriteLine(*(b._buffer + i)); } } }
static void Main(string[] args) { void Fun1(in int i) { int a = 10; //i = a; Console.WriteLine("Nie ma możliwości zmiany danej wejściowej"); } void Fun2(out int i) { int a = 11; i = a; } void Fun3(ref int i) { int a = 12; i = a; } void Fun4(int i) { int a = 13; i = a; } void Cwiczenie_1d(in string s) { Console.WriteLine("Wywołano funkcję z modyfikatorem in!"); } /*void Cwiczenie_1d(out string s) * { * Console.WriteLine("Wywołano funkcję z modyfikatorem out!"); * }*/ void Fun5(Point p) { Point p1 = new Point(10, 10); p.x = p1.x; p.y = p1.x; } void Fun6(ref Point p) { Point p1 = new Point(20, 20); p.x = p1.x; p.y = p1.x; } bool powtorka = true; while (powtorka) { Console.WriteLine("Podaj numer cwiczenia"); string cwiczenie = Console.ReadLine(); if (cwiczenie == "1") { int x = 1; Console.WriteLine("Zmienna int x=1"); Console.WriteLine("Przekazanie x do fun1"); Fun1(in x); Console.WriteLine("Wartosc po przekazaniu: " + x.ToString()); Console.WriteLine("Przekazanie x do fun2"); Fun2(out x); Console.WriteLine("Wartosc po przekazaniu: " + x.ToString()); Console.WriteLine("Przekazanie x do fun3"); Fun3(ref x); Console.WriteLine("Wartosc po przekazaniu: " + x.ToString()); Console.WriteLine("Przekazanie x do fun4"); Fun4(x); Console.WriteLine("Wartosc po przekazaniu: " + x.ToString()); short y = 1; Console.WriteLine(""); Console.WriteLine("Zmienna int y=1"); Console.WriteLine("Przekazanie y do fun1"); Fun1(y); Console.WriteLine("Wartosc po przekazaniu: " + y.ToString()); Console.WriteLine("Przekazanie y do fun2"); //Fun2(out y); Console.WriteLine("Nie ma możliwości przekazanie zmiennej typu short z modyfikatorem out"); Console.WriteLine("Przekazanie y do fun3"); //Fun3(ref y); Console.WriteLine("Nie ma możliwości przekazanie zmiennej typu short z modyfikatorem ref"); Console.WriteLine("Przekazanie y do fun4"); Fun4(y); Console.WriteLine("Wartosc po przekazaniu: " + y.ToString()); Console.WriteLine("Nie ma możliwości zdefiniowania dwóch funkcji o tej samej nazwie różniących się jedynie modyfikatorem in i out."); Point p = new Point(1, 1); Console.WriteLine(""); Console.WriteLine("Utworzono obiekt Point o x=1 y=1"); Console.WriteLine("Przekazanie p do fun5"); Fun5(p); Console.WriteLine("Wartosci po przekazaniu: x=" + p.x.ToString() + " y=" + p.y.ToString()); Console.WriteLine("Przekazanie p do fun6"); Fun6(ref p); Console.WriteLine("Wartosci po przekazaniu: x=" + p.x.ToString() + " y=" + p.y.ToString()); Console.WriteLine("Przypisanie do obiektu p wskaźnika null."); p = null; Console.WriteLine("Przekazanie p do fun5"); //Fun5(p); Console.WriteLine("Nie można przekazać zmiennej ze wskaźnikiem null do Fun5 - program generuje wyjątek"); Console.WriteLine("Przekazanie p do fun6"); //Fun6(ref p); Console.WriteLine("Nie można przekazać zmiennej ze wskaźnikiem null do Fun5 - program generuje wyjątek"); } if (cwiczenie == "2") { TestPointer.Cwiczenie2(); Console.WriteLine("Po usunieciu unsafe nie ma mozliwosci skorzystania z modyfikatora fixed \n"); Console.WriteLine("Zadeklarowano zmienne int a=5 i int b=10 oraz przekazano je do funkcji swap."); int a = 5; int b = 10; unsafe { Swap(&a, &b); } Console.WriteLine("Wartosci po wywolaniu funkcji swap: a=" + a.ToString() + " b=" + b.ToString()); Console.WriteLine("Alokacja bufora pamięci typu int"); unsafe { int lBufor = 1024; int[] bufor = new int[lBufor]; fixed(int *pBufor = bufor) { for (int i = 0; i < lBufor; i++) { *(pBufor + i) = i; } Console.WriteLine("Zawartosc bufora: "); for (int i = 0; i < lBufor; i++) { Console.Write(*(pBufor + i) + " "); } } } } if (cwiczenie == "3") { bool cw3 = true; string[] tab = new string[10]; while (cw3) { Console.WriteLine("Podaj znak do tablicy (Podanie 'N' wychodzi z programu)"); string ciag = Console.ReadLine(); if (ciag == "N") { cw3 = false; break; } for (int i = 9; i >= 0; i--) { if (i == 0) { tab[i] = ciag; } else { tab[i] = tab[i - 1]; } } for (int i = 0; i < 10; i++) { Console.WriteLine("Element w tablicy: " + i + " ma wartość: " + tab[i]); } } } if (cwiczenie == "4") { int[] tab = new int[5]; for (int i = 0; i < 5; i++) { try { Console.WriteLine("Podaj " + (i + 1).ToString() + " liczbę"); tab[i] = int.Parse(Console.ReadLine()); } catch (Exception e) { Console.WriteLine("Nastąpił wyjątek: " + e); } } Console.WriteLine("Liczby w odwrotnej kolejności: "); for (int i = 4; i >= 0; i--) { Console.WriteLine(tab[i]); } } if (cwiczenie == "5") { int[] tab = new int[5]; for (int i = 0; i < 5; i++) { try { Console.WriteLine("Podaj " + (i + 1).ToString() + " liczbę"); tab[i] = int.Parse(Console.ReadLine()); } catch (Exception e) { Console.WriteLine("Nastąpił wyjątek: " + e); } } Console.WriteLine("Liczby w odwrotnej kolejności: "); int count = 0; for (int i = 0; i < 4; i++) { for (int j = i + 1; j < tab.Length; j++) { if (tab[i] == tab[j]) { count++; break; } } } Console.WriteLine("Liczba powtarzających się liczb: " + count); } if (cwiczenie == "6") { int[,] tab1 = new int[5, 5]; int[,] tab2 = new int[5, 5]; int[,] suma = new int[5, 5]; Random rand = new Random(); for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { tab1[i, j] = rand.Next(100); tab2[i, j] = rand.Next(100); suma[i, j] = tab1[i, j] + tab2[i, j]; } } Console.WriteLine("Wartosci pierwszej tablicy: "); string ciag; for (int i = 0; i < 5; i++) { ciag = null; for (int j = 0; j < 5; j++) { if (j == 0) { ciag = tab1[i, j].ToString(); } else { ciag = ciag + " " + tab1[i, j].ToString(); } } Console.WriteLine(ciag); } Console.WriteLine("Wartosci drugiej tablicy: "); for (int i = 0; i < 5; i++) { ciag = null; for (int j = 0; j < 5; j++) { if (j == 0) { ciag = tab2[i, j].ToString(); } else { ciag = ciag + " " + tab2[i, j].ToString(); } } Console.WriteLine(ciag); } Console.WriteLine("Suma tablic: "); for (int i = 0; i < 5; i++) { ciag = null; for (int j = 0; j < 5; j++) { if (j == 0) { ciag = suma[i, j].ToString(); } else { ciag = ciag + " " + suma[i, j].ToString(); } } Console.WriteLine(ciag); } Console.WriteLine("Własności talbicy wynikowej: "); Console.WriteLine("Wartosc Length: " + suma.Length); Console.WriteLine("Wartosc LongLength: " + suma.LongLength); Console.WriteLine("Wartosc Rank: " + suma.Rank); } if (cwiczenie == "7") { int[,] arr = new int[3, 3]; arr[0, 0] = 1; arr[0, 1] = 0; arr[0, 2] = -1; arr[1, 0] = 0; arr[1, 1] = 0; arr[1, 2] = 1; arr[2, 0] = -1; arr[2, 1] = -1; arr[2, 2] = 0; int wyznacznik = (arr[0, 0] * arr[1, 1] * arr[2, 2]) + (arr[0, 1] * arr[1, 2] * arr[2, 0]) + (arr[0, 2] * arr[1, 0] * arr[2, 1]) - (arr[0, 2] * arr[1, 1] * arr[2, 0]) - (arr[0, 1] * arr[1, 0] * arr[2, 2]) - (arr[0, 0] * arr[1, 2] * arr[2, 1]); Console.WriteLine("Wyznacznik podanej macierzy wynosi: " + wyznacznik); } if (cwiczenie == "8") { int[][] tab1 = new int[5][]; tab1[0] = new int[3]; tab1[1] = new int[6]; tab1[2] = new int[4]; tab1[3] = new int[5]; tab1[4] = new int[3]; tab1[0][0] = 1; tab1[0][1] = 2; tab1[0][2] = 3; tab1[1][0] = 4; tab1[1][1] = 5; tab1[1][2] = 6; tab1[1][3] = 7; tab1[1][4] = 8; tab1[1][5] = 9; tab1[2][0] = 10; tab1[2][1] = 11; tab1[2][2] = 12; tab1[2][3] = 13; tab1[3][0] = 14; tab1[3][1] = 15; tab1[3][2] = 16; tab1[3][3] = 17; tab1[3][4] = 18; tab1[4][0] = 19; tab1[4][1] = 20; tab1[4][2] = 21; Console.WriteLine("Tablica schodkowa, pierwszy sposób inicjalizacji:"); foreach (var tab in tab1) { string wypisz = ""; foreach (var t in tab) { wypisz = wypisz + t.ToString() + " "; } Console.WriteLine(wypisz); } int[][] tab2 = new int[5][]; tab2[0] = new int[] { 1, 2, 3 }; tab2[1] = new int[] { 3, 5, 6, 7, 8, 9 }; tab2[2] = new int[] { 10, 11, 12, 13 };; tab2[3] = new int[] { 14, 15, 16, 17, 18 }; tab2[4] = new int[] { 19, 20, 21 }; Console.WriteLine("Tablica schodkowa, drugi sposób inicjalizacji:"); foreach (var tab in tab2) { string wypisz = ""; foreach (var t in tab) { wypisz = wypisz + t.ToString() + " "; } Console.WriteLine(wypisz); } } Console.WriteLine("Powtórzyć program? [T/N]"); string pytanie = Console.ReadLine(); if (pytanie == "N" || pytanie == "n") { powtorka = false; } } }