[問題] 指標的用途?

看板C_Sharp作者 (純潔)時間16年前 (2010/03/10 20:53), 編輯推噓4(4013)
留言17則, 4人參與, 最新討論串1/1
剛剛看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

03/10 23:25, , 1F
用StringBuilder ,c#和vb一樣,記憶體方面他自動幫你搞定
03/10 23:25, 1F

03/10 23:26, , 2F
指標你可以用在,把變數傳進去某method,他幫你改動值,但不用傳
03/10 23:26, 2F

03/10 23:26, , 3F
出來,你傳進去的那個值就已經被變更過了,因為你傳的是址
03/10 23:26, 3F

03/10 23:43, , 4F
看不懂第一個問題 超出什麼陣列?
03/10 23:43, 4F

03/10 23:44, , 5F
不是只有累加指標指向的記憶體位置 還是?
03/10 23:44, 5F

03/11 00:39, , 6F
指標可以讀、寫不是自己程式的變數....
03/11 00:39, 6F

03/11 00:41, , 7F
C#傳進變數修改是用ref跟out 似乎就沒必要用指標了說
03/11 00:41, 7F

03/11 00:42, , 8F
faithy 原本那一段程式可以讀取變數以外的位址
03/11 00:42, 8F

03/11 00:45, , 9F
反過來說.... 要寫入也是可以的....
03/11 00:45, 9F

03/11 00:47, , 10F
我第一次接觸C++學到指標時,也只學到ref out那種用法而已,
03/11 00:47, 10F

03/11 00:47, , 11F
看到指標可以讀、寫變數以外的位址,是在看msdn才知道的事,
03/11 00:47, 11F

03/11 00:48, , 12F
所以會想問,指標還有有什麼特殊的用途?
03/11 00:48, 12F

03/11 00:49, , 13F
讀寫別的程式的變數蠻有趣的,這不就是Game Master的功能嗎?
03/11 00:49, 13F

03/11 00:49, , 14F
XD
03/11 00:49, 14F

03/11 08:59, , 15F
pointer在C++中常被用來做function pointer, 但C#有
03/11 08:59, 15F

03/11 09:00, , 16F
delegate, pointer在C#中就被標為不安全的(unsafe)
03/11 09:00, 16F

03/12 00:56, , 17F
了解 感謝 ^^"
03/12 00:56, 17F
文章代碼(AID): #1BbvPEH_ (C_Sharp)