作者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