Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

C# - Kode Tidak Aman

C# memungkinkan penggunaan variabel pointer dalam fungsi blok kode ketika ditandai dengan tidak aman pengubah. Kode tidak aman atau kode yang tidak dikelola adalah blok kode yang menggunakan pointer variabel.

Penunjuk

Penunjuk adalah variabel yang nilainya adalah alamat dari variabel lain yaitu, alamat langsung dari lokasi memori. mirip dengan variabel atau konstanta apa pun, Anda harus mendeklarasikan pointer sebelum Anda dapat menggunakannya untuk menyimpan alamat variabel apa pun.

Bentuk umum dari deklarasi pointer adalah

type *var-name;

Berikut ini adalah deklarasi pointer yang valid

int    *ip;    /* pointer to an integer */
double *dp;    /* pointer to a double */
float  *fp;    /* pointer to a float */
char   *ch     /* pointer to a character */

Contoh berikut mengilustrasikan penggunaan pointer dalam C#, menggunakan pengubah tidak aman −

using System;

namespace UnsafeCodeApplication {
   class Program {
      static unsafe void Main(string[] args) {
         int var = 20;
         int* p = &var;
         
         Console.WriteLine("Data is: {0} ",  var);
         Console.WriteLine("Address is: {0}",  (int)p);
         Console.ReadKey();
      }
   }
}

Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut

Data is: 20
Address is: 99215364

Alih-alih mendeklarasikan seluruh metode sebagai tidak aman, Anda juga dapat mendeklarasikan sebagian kode sebagai tidak aman. Contoh di bagian berikut menunjukkan hal ini.

Mengambil Nilai Data Menggunakan Pointer

Anda dapat mengambil data yang disimpan di lokasi yang direferensikan oleh variabel pointer, menggunakan ToString() metode. Contoh berikut menunjukkan ini

using System;

namespace UnsafeCodeApplication {
   class Program {
      public static void Main() {
         unsafe {
            int var = 20;
            int* p = &var;
            
            Console.WriteLine("Data is: {0} " , var);
            Console.WriteLine("Data is: {0} " , p->ToString());
            Console.WriteLine("Address is: {0} " , (int)p);
         }
         Console.ReadKey();
      }
   }
}

Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut

Data is: 20
Data is: 20
Address is: 77128984

Meneruskan Pointer sebagai Parameter ke Metode

Anda dapat meneruskan variabel pointer ke metode sebagai parameter. Contoh berikut mengilustrasikan ini

using System;

namespace UnsafeCodeApplication {
   class TestPointer {
      public unsafe void swap(int* p, int *q) {
         int temp = *p;
         *p = *q;
         *q = temp;
      }
      public unsafe static void Main() {
         TestPointer p = new TestPointer();
         int var1 = 10;
         int var2 = 20;
         int* x = &var1;
         int* y = &var2;
         
         Console.WriteLine("Before Swap: var1:{0}, var2: {1}", var1, var2);
         p.swap(x, y);

         Console.WriteLine("After Swap: var1:{0}, var2: {1}", var1, var2);
         Console.ReadKey();
      }
   }
}

Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut

Before Swap: var1: 10, var2: 20
After Swap: var1: 20, var2: 10

Mengakses Elemen Array Menggunakan Pointer

Dalam C#, nama array dan pointer ke tipe data yang sama dengan data array, bukan tipe variabel yang sama. Misalnya, int *p dan int[] p, bukan tipe yang sama. Anda dapat menambah variabel pointer p karena tidak tetap di memori tetapi alamat array sudah diperbaiki di memori, dan Anda tidak bisa menambahkannya.

Oleh karena itu, jika Anda perlu mengakses data array menggunakan variabel pointer, seperti yang biasa kita lakukan di C, atau C++ (silakan periksa:C Pointer), Anda perlu memperbaiki pointer menggunakan fixed kata kunci.

Contoh berikut menunjukkan ini

using System;

namespace UnsafeCodeApplication {
   class TestPointer {
      public unsafe static void Main() {
         int[]  list = {10, 100, 200};
         fixed(int *ptr = list)
         
         /* let us have array address in pointer */
         for ( int i = 0; i < 3; i++) {
            Console.WriteLine("Address of list[{0}]={1}",i,(int)(ptr + i));
            Console.WriteLine("Value of list[{0}]={1}", i, *(ptr + i));
         }
         
         Console.ReadKey();
      }
   }
}

Ketika kode di atas dikompilasi dan dieksekusi, menghasilkan hasil sebagai berikut

Address of list[0] = 31627168
Value of list[0] = 10
Address of list[1] = 31627172
Value of list[1] = 100
Address of list[2] = 31627176
Value of list[2] = 200

Mengkompilasi Kode Tidak Aman

Untuk mengkompilasi kode tidak aman, Anda harus menentukan /tidak aman sakelar baris perintah dengan kompiler baris perintah.

Misalnya, untuk mengkompilasi program bernama prog1.cs yang berisi kode tidak aman, dari baris perintah, berikan perintah −

csc /unsafe prog1.cs

Jika Anda menggunakan Visual Studio IDE maka Anda harus mengaktifkan penggunaan kode tidak aman di properti proyek.

Untuk melakukan ini


Bahasa C

  1. Kode Warna Resistor
  2. Kode Warna Pengkabelan
  3. C++ Pointer dengan Contoh
  4. Pointer dalam C:Apa itu Pointer dalam Pemrograman C? Jenis
  5. C - Pointer
  6. Kode Matriks Data vs. Kode QR
  7. Kode Haas Mill M
  8. Kode Mach3 M
  9. Kode M – Kuis Pemrograman CNC
  10. Kode G – Kuis Pemrograman CNC