今天第一天寫技術隨筆,寫的不好,望讀者海涵。
這兩天在學C#中的不安全代碼,聽到這個名字,首先想到的就是既然不安全為什麼還要有這樣的功能,為什麼還要使用呢?其實,這與我們現實生活中的很多事存在或者處理的道理是一樣的,如果對於我們的目標,它是利大於弊的話,那就有選擇它的原因。而所謂的不安全代碼,並不是指拙劣的代碼,而是這類代碼的執行不受公共語言運行時(CLR)的完全管理,即非托管的代碼,這種代碼沒有與托管代碼相同的控制和約束,由於不受CLR的完全控制,也無法檢驗該代碼以確保其不執行有害的操作,所以叫做“不安全代碼”。
在C#中使用不安全代碼的主要目的是為了使用指針,因為指針的不安全性,托管代碼不支持指針,但是對於一些特定類型的編程工作,使用指針會實現高性能的系統代碼。
在C#中,指針的使用和聲明與C/C++中是一樣的。需要注意的是任何使用指針的代碼都必須通過使用unsafe標記為不安全,可以將類型(如類或者結構),成員或單獨的代碼塊標記為不安全。如下面:
1 using Syetem; 2 class Test{ 3 public int num; 4 public Test(int i) 5 { 6 num=i; 7 } 8 } 9 10 class EixedCode{ 11 unsafe static void Main() 12 { 13 Test o=new Test(2);14 fixed(int * p=&ol.num){ //使用指針時,通常會使用fixed修飾符,它可以防止垃圾回收器移動托管代碼,這裡fixed修飾符阻止移動對象o 15 console.WriteLine("vale"); 16 17 } 18 } 19 }
指針的內容就不在此繼續回顧了,今天就到這,謝謝閱讀。
c/o
以下結果由譯典通提供詞典解釋
縮寫詞 abbr.
1.
=care of由...轉交(書信用語)
2.
=carried over 【會計】結轉下頁;轉期交割(交易所用語)
3.
=cash order 【會計】即期票,現付票,現金票據;現金定貨單
fflush(stdin)
清空標准輸入緩存
#include "stdio.h"
main()
{
char a,b;
scanf("%c",&a);
//fflush(stdin);
scanf("%c",&b);
printf("\n%c %c",a,b);
}
可以嘗試,沒有fflush(stdin)時,輸入一串字符"abcd",則a='a',b='b'
如果有fflush(stdin),則在輸入"abcd"後程序會繼續等待輸入,再輸入"efdfsd",結果a='a',b='e'