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

Menguasai Kode Tidak Aman C#: Panduan Pointer dan Manajemen Memori

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

Pointer

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

Bentuk umum deklarasi pointer adalah −

type *var-name;

Berikut 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 menunjukkan penggunaan pointer dalam C#, menggunakan modifikasi unsafe −

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, hasilnya adalah 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 dalam bagian berikut menunjukkan ini.

Mengambil Nilai Data Menggunakan Pointer

Anda dapat mengambil data yang disimpan di lokasi yang dirujuk oleh variabel pointer, menggunakan metode ToString(). 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, hasilnya adalah 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 menunjukkan 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, hasilnya adalah 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 meningkatkan variabel pointer p karena tidak tetap dalam memori, tetapi alamat array tetap dalam memori, dan Anda tidak dapat meningkatkannya.

Oleh karena itu, jika Anda perlu mengakses data array menggunakan variabel pointer, seperti yang dilakukan secara tradisional dalam C, atau C++, Anda perlu tetapkan pointer menggunakan kata kunci fixed.

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, hasilnya adalah 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

Mengompilasi Kode Tidak Aman

Untuk mengompilasi kode tidak aman, Anda harus menentukan opsi baris perintah /unsafe dengan compiler baris perintah.

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

csc /unsafe prog1.cs

Jika Anda menggunakan Visual Studio IDE, Anda perlu mengaktifkan penggunaan kode tidak aman dalam properti proyek.

Untuk melakukan ini −


Bahasa C

  1. Kode Warna Resistor – Panduan Lengkap untuk Mendekode Nilai, Toleransi, dan Standar E-Series
  2. Kode Warna Penyaluran Standar untuk Sirkuit AC & DC – IEC, AS, Inggris & Kanada
  3. Menguasai Pointer C++: Konsep, Contoh, dan Aplikasi Praktis
  4. Pointer dalam C: Panduan Lengkap tentang Tipe, Penggunaan, dan Praktik Terbaik
  5. Menguasai Pointer C: Langkah Praktis Menuju Pemrograman Lanjutan
  6. Memilih Antara Data Matrix dan QR Code: Mana yang Terbaik untuk Bisnis Anda
  7. Panduan Lengkap Kode M Mesin Frais Haas: Fungsi, Pengaturan & Penggunaan
  8. Panduan Lengkap Kode M Mach3 untuk Pemesinan CNC
  9. Mahir Kode M: Kuis Pemrograman CNC
  10. Mahir Kode G: Ikuti Kuis Pemrograman CNC