将项目的“可编译不安全代码”属性设置为true就可以了,方法如下:项目属性对话框->配置属性->生成->允许不安全代码块

namespace Pointer
{
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 Console.ReadKey();
}
}
}

  

C#查看各种变量的指针地址的更多相关文章

  1. go之变量、指针、引用地址

    一.值类型 定义和说明 定义:变量直接指向存在内存中的值,我们称之为值类型. 值类型的变量的值存储在栈中. 值类型 将一个变量赋值给另一个变量 被称为值拷贝 实例 package main impor ...

  2. 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?

    "指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...

  3. C语言函数指针变量和指针函数以及指针数组

    C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...

  4. 从汇编看c++中指向成员变量的指针(二)

    在从汇编看c++中指向成员变量的指针(一)中讨论的情形没有虚拟继承,下面来看看,当加入了虚拟继承的时候,指向成员变量的指针有什么变化. 下面是c++源码: #include <iostream& ...

  5. 从汇编看c++中指向成员变量的指针(一)

    在c++中,指向类成员变量的指针存储的并不是该成员变量所在内存的地址,而仅仅是该成员变量在该类对象中相对于对象首地址的偏移量.因此,它必须绑定到某一个对象或者对象指针上面,这里的对象和对象指针,就相当 ...

  6. C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)

    函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  7. Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

    Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇 ...

  8. C语言中数组变量和指针变量

    指针变量为什么需要类型? 数组变量和指针变量在使用sizeof时不同,sizeof(数组变量)是数组长度,sizeof(指针变量)是存储int的字节长度4或者8(64bit). 数组变量在参数传递中, ...

  9. (转)Linux下设置和查看环境变量

    原文地址:<Linux下设置和查看环境变量> Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1. 永久的:需要修改配置文件,变量永久生效. 2. 临时的:使用e ...

随机推荐

  1. shiro和quartz同时存在于项目中,解决冲突的方案

    shiro自带了quartz定时任务,不过版本是1.3的 很多项目都会使用shiro,另外定时任务也会使用,quartz的版本2.2目前和shiro不兼容 有人通过修改源码可以解决 我这边是这样解决的 ...

  2. json注入

  3. Maven学习(七)仓库

    * Maven仓库 在项目开发中,  项目目录下往往会有一个lib目录,用来存放第三方依赖jar文件, 如spring log4j jar等文件, Maven仓库就是放置JAR文件(WAR,ZIP,P ...

  4. java 24 - 11 GUI之制作登陆注册页面

    简单说说,懒得发了... 步骤: A:首先写出登陆注册需要用到类以及代码(IO流) B:然后创建登陆窗口和注册窗口 C:各个监听事件: a:登录窗口 1.重置:把2个文本框的内容全部清空 2.注册:关 ...

  5. 关于button和form提交的一些问题

    1.form 中type 为submit 和button的区别 submit是button的一个特例,也是button的一种,它把提交这个动作自动集成了. 如果表单在点击提交按钮后需要用JS进行处理( ...

  6. translateZ 带来的Z-index 问题

    今天遇到了一个问题,当一个3D变换元素translateZ这个属性的值为负值的时候,这个元素的Z-index就不会其作用,解决方法就是translateZ的值必须大于等于0才能让Z-index 起作用 ...

  7. Angular权威指南学习笔记(转)

    http://www.cnblogs.com/lzhp/p/4000741.html 第一章.        初识Angular——Angular是MVW的Js框架. 第二章.        数据绑定 ...

  8. TinyFrame升级之八:实现简易插件化开发

    本章主要讲解如何为框架新增插件化开发功能. 在.net 4.0中,我们可以在Application开始之前,通过PreApplicationStartMethod方法加载所需要的任何东西.那么今天我们 ...

  9. 【转】CSS样式覆盖规则

    大家都知道CSS的全称叫做“层叠样式表”,但估计很多人都不知道“层叠”二字的含义.其实,“层叠”指的就是样式的覆盖,当一个元素被运用上多种样式,并且出现重名的样式属性时,浏览器必须从中选择一个属性值, ...

  10. FineUI v4.0.2 (beta) 发布了!

    FineUI v4.0.2 (beta) 已经于 2013-12-15 发布! ================================== 关于FineUI基于 ExtJS 的开源 ASP. ...