将项目的“可编译不安全代码”属性设置为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. (三)策略模式-C++实现

    策略模式:定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换,本模式使得算法可独立于使用它的客户而变化. 三种角色: 1.策略:一个抽象类,这个接口定义了若干个算法标识,即多个虚函数,这些个 ...

  2. 谈谈 Google 的 Test Certified

    转载请联系作者,谢谢! 本文简单介绍下Google的Test Certified. Test Certified(后文简称TC)是Google内部的一个认证项目,在8年的时间里取得了多个里程碑,有17 ...

  3. AC日记——大小写字母互换 openjudge 1.7 14

    14:大小写字母互换 总时间限制:  1000ms 内存限制:  65536kB 描述 把一个字符串中所有出现的大写字母都替换成小写字母,同时把小写字母替换成大写字母. 输入 输入一行:待互换的字符串 ...

  4. 深入Java核心 Java内存分配原理精讲

    深入Java核心 Java内存分配原理精讲 栈.堆.常量池虽同属Java内存分配时操作的区域,但其适用范围和功用却大不相同.本文将深入Java核心,详细讲解Java内存分配方面的知识. Java内存分 ...

  5. 线程 VS 进程

    线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2)资源拥有: ...

  6. MySQL与MongoDB的操作对比,以及区别

    MySQL与MongoDB都是开源的常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数据库,是一种NoSQL的数据库.它们各有各的优点,关键是看用在什么地方 ...

  7. UOJ #150 【NOIP2015】 运输计划

    题目描述 公元 \(2044\) 年,人类进入了宇宙纪元. \(L\) 国有 \(n\) 个星球,还有 \(n-1\) 条双向航道,每条航道建立在两个星球之间,这 \(n-1\) 条航道连通了 \(L ...

  8. BZOJ 1016 【JSOI2008】 最小生成树计数

    Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...

  9. Incorrect string value异常解决

    mysql数据库的一个问题 1366-Incorrect string value:'\xE5\x8D\xA1\xE5......' for column 'filename' at row 1 问题 ...

  10. ios蓝牙开发(三)ios连接外设的代码实现:手机app去读写蓝牙设备。

    手机app去读写蓝牙设备....... 代码下载: 原文博客主提供Github代码连接,地址是:https://github.com/coolnameismy/demo ios连接外设的代码实现流程: ...