作者F23ko (纯洁)
看板C_Sharp
标题[问题] 指标的用途?
时间Wed Mar 10 20:53:29 2010
刚刚看MSDN的范例
看到一个有趣的东西:
unsafe static void Main()
{
int number = 1024;
byte* p = (byte*)&number;
for (int i = 0;
i < 1000; ++i)
{
System.Console.Write("{0:X2}", *p);
p++;
if (i % 10 == 9)
{
if (i%30 != 29) Console.Write(" ");
else Console.WriteLine();
}
}
}
红字的地方是自己改的
发现...... 可以读取超出阵列的东西......
其实,这样子还蛮危险的
因为如果把
for (int i = 0; i < 1000; ++i)
{.......}
改成
while(true) {*p = 0xff; p++;}
的话,似乎会发生很有趣的事.......
===========================================================
MSDN有写:
string在C#中是不可变更的
变更字串时,其实是new新字串,把旧字串抛弃
自己在想说.....
如果要变更文字,且要追求效率的话,使用指标强制变更内文会不会比较快?
以及,想请问指标这东西通常是拿来干什麽用的?
什麽状况下用指标会比较好?
自己的经验不多,所以想请教这个问题。
--
◢
乡民啊!乡民! 请告诉我谁是最纯洁的人!
◢█ │
PTT │
██
:就是你!Snow White F23ko!│
█◤ ╯
◤ ﹨(╯▽╰ )∕
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.27.109.99
1F:推 Sany:用StringBuilder ,c#和vb一样,记忆体方面他自动帮你搞定 03/10 23:25
2F:→ Sany:指标你可以用在,把变数传进去某method,他帮你改动值,但不用传 03/10 23:26
3F:→ Sany:出来,你传进去的那个值就已经被变更过了,因为你传的是址 03/10 23:26
4F:推 FAITHY:看不懂第一个问题 超出什麽阵列? 03/10 23:43
5F:→ FAITHY:不是只有累加指标指向的记忆体位置 还是? 03/10 23:44
6F:→ F23ko:指标可以读、写不是自己程式的变数.... 03/11 00:39
7F:→ F23ko:C#传进变数修改是用ref跟out 似乎就没必要用指标了说 03/11 00:41
8F:→ F23ko:faithy 原本那一段程式可以读取变数以外的位址 03/11 00:42
9F:→ F23ko:反过来说.... 要写入也是可以的.... 03/11 00:45
10F:→ F23ko:我第一次接触C++学到指标时,也只学到ref out那种用法而已, 03/11 00:47
11F:→ F23ko:看到指标可以读、写变数以外的位址,是在看msdn才知道的事, 03/11 00:47
12F:→ F23ko:所以会想问,指标还有有什麽特殊的用途? 03/11 00:48
13F:→ F23ko:读写别的程式的变数蛮有趣的,这不就是Game Master的功能吗? 03/11 00:49
14F:→ F23ko:XD 03/11 00:49
15F:推 horngsh:pointer在C++中常被用来做function pointer, 但C#有 03/11 08:59
16F:推 horngsh:delegate, pointer在C#中就被标为不安全的(unsafe) 03/11 09:00
17F:→ F23ko:了解 感谢 ^^" 03/12 00:56