Bahasa C
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 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.
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
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
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
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
Buka properti proyek dengan mengklik dua kali node properti di Solution Explorer.
Klik pada Bangun tab.
Pilih opsi "Izinkan kode tidak aman ".
Bahasa C
Daftar kode Mazak G untuk ahli mesin cnc yang mengerjakan mesin cnc Mazak INTEGREX 300/400-III/III T/IIIS/IIIIST. Kode Mazak G Kode G Fungsi G00 Posisi G01 Interpolasi linier G01.1 Penguliran dengan interpolasi sumbu C G02 Interpolasi melingkar (CW) G03 Interpolasi melingkar (CCW) G02.1 Inte
Sherline CNC G Codes M Codes daftar lengkap untuk masinis cnc yang mengerjakan pabrik/bubut cnc Sherline. Selengkapnya tentang Sherline CNC Penjelasan Suku Cadang Utama Bubut CNC Sherline Penjelasan Suku Cadang Utama Pabrik CNC Sherline Kode G Sherline Kode G Fungsi G00 Gerakan cepat (pemosisi
GTCNC-150iT-II G Kode M Kode GREAT-150iT-II atau GTCNC-150iT-II Kode G Kode M untuk Bubut CNC. Kode G Kode G Deskripsi G00 Pemosisian cepat G01 Interpolasi linier G02 Interpolasi heliks CW G03 CCW interpolasi heliks G33 Menginjak G04 Tinggal G17 Pesawat X-Y G18 Pesawat Z-X G19 Pesawat Y-Z
GTCNC-60TT Kode M Kode G GREAT-60TT atau GTCNC-60TT Kode G Kode M untuk Mesin Bubut CNC. Kode G Kode G Deskripsi G00 Gerakan cepat G01 Interpolasi linier G02 CW interpolasi melingkar G03 CCW interpolasi melingkar G33 Pemotongan benang G04 Tinggal G20 Masukan format inci G21 Masukan format