关于C#中引述和指针的概念,初学C
关于C#中引用和指针的概念,初学C#
如果现在有一个类Person
Person p=new Person();这里这个p应该是引用类型的变量,它存储的应该是Person对象在堆中的地址
那p算不算指针呢?
另外:既然p存放的是堆中对象的地址引用,那为什么打印的会是命名空间而不是地址呢?引用类型默认输出的都是命名空间
可是在VS中调试的时候,在即时窗口里对p进行取址运算:
&p 得到的却是p在栈中的地址以及p所存放的对象的地址
//&p
//0x0528ea28
// p: 0x023f1384
这是为什么呢?
------解决思路----------------------
P是引用类型,不是指针,.NET里面不推荐用指针,如果一定要用,也只是用在图像等一些高级算法里,用来提高程序运行效率的。对象操作是不能用指针完成的,指针只支持字节数组操作,且要启用不安全代码。
至于打印,我不知道你的打印是什么意思,如果是调用Console.Print方法的话,那个会调用Object的ToString方法,这个方法的源码你看下就知道了,默认就是输出命名空间+类名,对于重载的情况,例如String类,则是输出字符串本身。
------解决思路----------------------
每一个对象,都有一个 ToString() 方法,在打印时打印的就是它。
至于你说“打印的是对象的引用”,我还真没有听说过有人会提出这种问题来。如果你打印变量p,那么你就是打印p所引用的对象。这个从基本概念上,根本就不是什么“打印引用”。要打印引用,那么你需要把引用计算、转换为一个对象,然后赋值给另一个变量,例如m,然后打印这个新的变量m,你才能看到你要的那种p的结果。
如果现在有一个类Person
Person p=new Person();这里这个p应该是引用类型的变量,它存储的应该是Person对象在堆中的地址
那p算不算指针呢?
另外:既然p存放的是堆中对象的地址引用,那为什么打印的会是命名空间而不是地址呢?引用类型默认输出的都是命名空间
可是在VS中调试的时候,在即时窗口里对p进行取址运算:
&p 得到的却是p在栈中的地址以及p所存放的对象的地址
//&p
//0x0528ea28
// p: 0x023f1384
这是为什么呢?
------解决思路----------------------
P是引用类型,不是指针,.NET里面不推荐用指针,如果一定要用,也只是用在图像等一些高级算法里,用来提高程序运行效率的。对象操作是不能用指针完成的,指针只支持字节数组操作,且要启用不安全代码。
至于打印,我不知道你的打印是什么意思,如果是调用Console.Print方法的话,那个会调用Object的ToString方法,这个方法的源码你看下就知道了,默认就是输出命名空间+类名,对于重载的情况,例如String类,则是输出字符串本身。
------解决思路----------------------
每一个对象,都有一个 ToString() 方法,在打印时打印的就是它。
至于你说“打印的是对象的引用”,我还真没有听说过有人会提出这种问题来。如果你打印变量p,那么你就是打印p所引用的对象。这个从基本概念上,根本就不是什么“打印引用”。要打印引用,那么你需要把引用计算、转换为一个对象,然后赋值给另一个变量,例如m,然后打印这个新的变量m,你才能看到你要的那种p的结果。