c#中没有指针吗?如果没有,什么取代了指针?

Microsues 2011-01-04 07:43:38
c#中没有指针吗?如果没有,什么取代了指针?
委托可以理解成C中的函数指针吗?
...全文
13101 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiyi_zhou001 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 31 楼 midninght 的回复:]
从C/C++转到C#/JAVA都不习惯没有指针,感觉没有指针干不了活
从C#/JAVA转到C/C++都不习惯有了指针,感觉写程到处都要指针
[/Quote]
习惯这个毛病得改!
苏塔亚库 2011-01-05
  • 打赏
  • 举报
回复
从C/C++转到C#/JAVA都不习惯没有指针,感觉没有指针干不了活
从C#/JAVA转到C/C++都不习惯有了指针,感觉写程到处都要指针
xupeihuagudulei 2011-01-05
  • 打赏
  • 举报
回复
高人们都说委托代替了指针,
足球中国 2011-01-05
  • 打赏
  • 举报
回复
对。楼上说的很正确。 这也是c#开发标准之一。
碎碎念 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xuld222 的回复:]

2L - 5L 都是浮云。。


C# 一切 class 实例都是指针
[/Quote]
一切class实例都是引用吧。。。
卧云 2011-01-05
  • 打赏
  • 举报
回复
指针其实是指向内存某个地址的变量,也就是说使用指针实际上是直接操作内存。
在C#中,由于.Net正常情况下不允许直接操作内存,因此指针在C#中属于“不安全代码”。但并不是说C#就不能用指针,如果需要用指针的话,按下列步骤操作:
1、“项目”菜单--》最后一项有个项目属性,名字根据你的项目名字不同而改变,单击它,打开属性页,在“生成”面板上,钩选“允许不安全代码”。

2、在需要使用指针的过程或类的声明上加上unsafe修饰符:
public unsafe partial class Form1 : Form

private unsafe void Form1_Load(object sender, EventArgs e)

3、声明指针:在类型名后面加上“*”,如:
int* pi;
float* pf, pq;
char* pz;

4、指针的基本用法:
int* pi; //声明指针变量
int x = 1; //声明int变量
pi = &x; //把pi指向x,&x返回x所在的内存地址
System.Console.WriteLine("Value of x is: " + *pi); //输出pi指向的变量的值(也就是x的值),如果直接输出pi,则是输出pi所指的内存地址。


要说的一点是,如果能不使用指针的话尽量不要使用指针,毕竟直接操作内存的风险比较大,容易发生意外。

其实有一些基本的操作还是可以不用指针的,例如:
void myMethod(int* a){
*a = 2;
}
int x = 1;
myMethod(&x);
这样的代码可以替换为:
void myMethod(ref int a){
a = 2;
}
int x = 1;
myMethod(ref x);
卧云 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 microtry 的回复:]
为了保持类型安全,默认情况下,C# 不支持指针运算。不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文,请参见MSDN:
http://msdn.microsoft.com/zh-cn/library/t2yzs44b(v=VS.80).aspx

和MSDN关于C#指针类型的文档:


要是微软当初C#起个名字叫D#就好了
[/Quote]

不懂就别装逼了,去到那里都是弄一个MSDN的地址,你别人不会查文档,水平垃圾就多学习,别伪装
chuchenghao1989 2011-01-05
  • 打赏
  • 举报
回复
C#中有 不过基本不用
koukoujiayi 2011-01-05
  • 打赏
  • 举报
回复
有没有是一回事
用不用是另外一回事
mailbao 2011-01-05
  • 打赏
  • 举报
回复
看大蝦們爭辯~
zkicker 2011-01-05
  • 打赏
  • 举报
回复
我一直以为没有指针。。。原来还有unsafe。。。
yunpeng8800 2011-01-05
  • 打赏
  • 举报
回复
c#中有指针,需要使用unsafe关键字
  • 打赏
  • 举报
回复
比如c#中的static跟vb.net的shared的语法语义并不相同,这就是由于都是方言的原因。关于CLS介绍,可以看msdn:
http://msdn.microsoft.com/zh-cn/library/12a7a7h3.aspx
  • 打赏
  • 举报
回复
[Quote=引用楼主 microsues 的回复:]什么取代了指针?
[/Quote]

为什么“没有”就必须是“取代”呢?

.net的语言基础是CLS,它是 ECMA(国际信息和电信标准组织)标准。各种.net兼容的语言都按照它来开发。然后,例如c#里边要跟matlib的程序连接编译,可以设计自己的方言。对于c也是一样。
threenewbee 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 microtry 的回复:]
引用 18 楼 caozhy 的回复:
严格地说,指针的概念本不属于C#。

同意:
我猜想有2种可能:
1.提供个指针的用法,跟C语言的指针没什么可比性;
2.绕过通用语言环境;
[/Quote]
比如C,有嵌入汇编,但是汇编不属于C的概念。
缪军 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 caozhy 的回复:]
严格地说,指针的概念本不属于C#。
[/Quote]
同意:
我猜想有2种可能:
1.提供个指针的用法,跟C语言的指针没什么可比性;
2.绕过通用语言环境;
threenewbee 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 microtry 的回复:]
更正15楼,MSDN关于C#指针类型的文档:
http://msdn.microsoft.com/zh-cn/library/y31yhkeb(v=VS.80).aspx
[/Quote]
严格地说,指针的概念本不属于C#。

或者说,优雅的,符合C#设计意图的设计,是不应该使用 unsafe,使用 pinvoke 的。
C#是一种面向CLR的,而不是具体机器的托管语言。
threenewbee 2011-01-05
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 xupeihuagudulei 的回复:]
高人们都说委托代替了指针,
[/Quote]
不严格地说,委托代替了函数指针
缪军 2011-01-05
  • 打赏
  • 举报
回复
更正15楼,MSDN关于C#指针类型的文档:
http://msdn.microsoft.com/zh-cn/library/y31yhkeb(v=VS.80).aspx
缪军 2011-01-05
  • 打赏
  • 举报
回复
为了保持类型安全,默认情况下,C# 不支持指针运算。不过,通过使用 unsafe 关键字,可以定义可使用指针的不安全上下文,请参见MSDN:
http://msdn.microsoft.com/zh-cn/library/t2yzs44b(v=VS.80).aspx

和MSDN关于C#指针类型的文档:


要是微软当初C#起个名字叫D#就好了
加载更多回复(12)

111,113

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧