看板 C_Sharp 關於我們 聯絡資訊
剛剛看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
Sany:用StringBuilder ,c#和vb一樣,記憶體方面他自動幫你搞定 03/10 23:25
Sany:指標你可以用在,把變數傳進去某method,他幫你改動值,但不用傳 03/10 23:26
Sany:出來,你傳進去的那個值就已經被變更過了,因為你傳的是址 03/10 23:26
FAITHY:看不懂第一個問題 超出什麼陣列? 03/10 23:43
FAITHY:不是只有累加指標指向的記憶體位置 還是? 03/10 23:44
F23ko:指標可以讀、寫不是自己程式的變數.... 03/11 00:39
F23ko:C#傳進變數修改是用ref跟out 似乎就沒必要用指標了說 03/11 00:41
F23ko:faithy 原本那一段程式可以讀取變數以外的位址 03/11 00:42
F23ko:反過來說.... 要寫入也是可以的.... 03/11 00:45
F23ko:我第一次接觸C++學到指標時,也只學到ref out那種用法而已, 03/11 00:47
F23ko:看到指標可以讀、寫變數以外的位址,是在看msdn才知道的事, 03/11 00:47
F23ko:所以會想問,指標還有有什麼特殊的用途? 03/11 00:48
F23ko:讀寫別的程式的變數蠻有趣的,這不就是Game Master的功能嗎? 03/11 00:49
F23ko:XD 03/11 00:49
horngsh:pointer在C++中常被用來做function pointer, 但C#有 03/11 08:59
horngsh:delegate, pointer在C#中就被標為不安全的(unsafe) 03/11 09:00
F23ko:了解 感謝 ^^" 03/12 00:56