• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#查看各种变量的指针地址

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

        }
    }
}

输出结果:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
重新审视C#SpanT数据结构发布时间:2022-07-13
下一篇:
C#API大全发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap