標籤:
FIXED介紹
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ struct XYZ { public int a; public int b; public int c; bool b1; }; class Program { //靜態變數儲存在堆上,查看指標時需用fixed固定 static int m_sZ = 100; //普通資料成員,也是放在堆上了,查看指標時需用fixed固定 int m_nData = 100; //等價於C/C++的 #define 語句,不分配記憶體 const int PI = 31415; //unsafe可以放在Main函式宣告中!! static unsafe void Main(string[] args) { //簡單的結構變數放在棧上,無需fixed XYZ stData = new XYZ(); stData.a = 100; Console.WriteLine("結構變數= 0x{0:x}", (int)&stData); //陣列變數的聲明放在了棧上,資料放在了堆上,需用fixed固定 int[] arry = null; arry = new int[10]; fixed(int *p = arry) { Console.WriteLine("array = 0x{0:x}", (int)p); } //這些放在棧上的變數,可以直接使用指標指向 //從列印的指標的資料看,int是4位元組的,double是8位元組的 int y = 10; int z = 100; double f = 0.90; Console.WriteLine("本地變數y = 0x{0:X}, z = 0x{1:X}", (int)&y, (int)&z); Console.WriteLine("本地變數f = 0x{0:X}", (int)&f); //下面失敗 //fixed (int* p = &P.PI) //{ //} //放在堆裡面的資料的地址,就必須用fixed語句! string ss = "Helo"; fixed(char *p = ss) { Console.WriteLine("字串地址= 0x{0:x}", (int)p); } Program P = new Program(); //這個是類對象,放在堆裡面 fixed(int *p = &P.m_nData) { Console.WriteLine("普通類成員變數 = 0x{0:X}", (int)p); } //靜態成員變數在堆上 fixed(int *p = &m_sZ) { Console.WriteLine("靜態成員變數 = 0x{0:X}", (int)p); } //下面是每種類型的佔用位元組個數 Console.Write("\n\n下面是每種類型的佔用位元組個數\n"); Console.WriteLine("sizeof(void *) = {0}", sizeof(void*)); Console.WriteLine("sizeof(int) = {0}, * = {1}", sizeof(int), sizeof(int*));//4 Console.WriteLine("sizeof(long) = {0}, * = {1}", sizeof(long), sizeof(long*));//8 Console.WriteLine("sizeof(byte) = {0}, * = {1}", sizeof(byte), sizeof(byte*));//1 Console.WriteLine("sizeof(bool) = {0}, * = {1}", sizeof(bool), sizeof(bool*));//1 Console.WriteLine("sizeof(float) = {0}, * = {1}", sizeof(float), sizeof(float*));//4 Console.WriteLine("sizeof(double) = {0}, * = {1}", sizeof(double), sizeof(double*));//8 Console.WriteLine("sizeof(decimal) = {0}, * = {1}", sizeof(decimal), sizeof(decimal*));//16 Console.WriteLine("sizeof(char) = {0}, * = {1}", sizeof(char), sizeof(char*));// Console.WriteLine("sizeof(XYZ) = {0}, * = {1}", sizeof(XYZ), sizeof(XYZ*));// //Console.WriteLine("sizeof(object) = {0}, * = {1}", sizeof(object), sizeof(object*));//16 //Console.WriteLine("sizeof(C) = {0}, * = {1}", sizeof(C), sizeof(C*));//16 } }}
輸出結果:
C#查看各種變數的指標地址