1樓:癯月笑浮生
c#是有指標的,沒有指標是錯誤的說法。 unsafe只不過是一個標記,不能將指標看作不安全的,這是極度錯誤的觀點,程式安全與否與程式設計師的水平有很大關係,指標改用的時候還要用的
2樓:匿名使用者
指標是非強型別化的,當使用一個指標的時候,指向的不是一個特定的型別,而僅僅是一塊記憶體區。對這個指標進行位移操作,然後向此位置寫入,就可能破壞記憶體,因此稱可以直接操作記憶體的**為不安全的(unsafe)。
平時我們使用c#,是在託管平臺上,這個平臺之所以被稱為「託管的」,是因為程式設計人員不再需要為記憶體的分配、管理和**做太多的工作,clr會在內部管理程式的記憶體。
但是在某些特殊的情況下,如與本地**或com+元件互動的時候,可能需要使用指標來傳遞引數,這時可以配置c#專案屬性,使其「允許不安全的**」,並在不安全的**塊前用unsafe修飾。這樣就可以在c#中使用指標。
c#中對指標是如何定義的?為什麼c#不太使用指標?
3樓:匿名使用者
c#是沒有指標的,如果一定要用,可以用c#中的委託(delegate),效果和函式指標相同
學習c#都會驚奇於它的delegate,其實delegate並沒有太多神祕的地方,說的通俗點,delegate是型別化了的函式指標,它主要應用於**。
學習c++的對函式指標都不回陌生,它是一個儲存了函式地址的變數,但除了地址,它沒有包含任何額外的資訊,如引數的個數、引數型別和函式的返回地址等,所以函式指標是非型別安全的。而delegate對**提供了型別的安全性,從而使我們在處理**等問題的時候可以更加優美的物件導向的方式來編寫**,並且在clr的內部對delegate的操作提供了許多支援(如delegate連結串列),簡化了我們常用的操作。
在使用delegate的過程中,首先要定義一個delegate的型別,如:
public delegate void somefunction(object a,int i,...);
note:它是一個類的定義,可以放在任何地方,此型別定義了此delegate所接收的函式的樣式:返回void,引數列表...
然後,為了使用,要定義類somefunction的一個例項:
public somefunction instance;
接著,我們就可以往這個delegate例項中放「符合規範」的函式(可以為例項函式和靜態函式)。
instance +=new somefunction(someobject.somemethod);
其中someobject為某類的一個例項,它的方面somemethod符合此委託的規範要求,否則將編譯報錯。
最後,可以直接呼叫instance例項來實現對someobject的somemethod的**。
instance(...);
##########################
只是從上面的實現中,貌似看不出delegate真正存在的價值,但實際上delegate增加了對鏈的支援,我們可以象下面這樣應用:
instance +=new somefunction(someobject.somemethod);
instance +=new somefunction(anotherobject.anothermethod);
...然後呼叫instance(...),可以同時激發所有註冊自裡面的**函式。
這是怎樣實現的,首先要研究delegate內在的結構,在每個delegate裡面包括了三個欄位:
target ——》指向**函式所屬的物件例項(對於例項方法來言)
method ——》指向**函式
prev ——》指向另外一個delegate 例項
通過prev就可以比較方便的實現delegate對鏈的支援。
clr定義了delegate.combine和delegate.remove靜態方法實現對連結串列的操作。
4樓:匿名使用者
資料型別 * 指標名;c#中沒有指標……
5樓:匿名使用者
c#中指標的定義和使用與c++基本相同,不太使用指標可能時因為不安全或者有替代辦法。
下面答案寫了很多的那位說c#沒有指標是完全錯誤的,c#指標屬於不安全**,要在unsafe**塊中使用,vs預設關閉了它,需要手動設定。
6樓:癯月笑浮生
c#.的指標是非常常用的,特別是與native dll進行通訊,以及進行流資訊處理,指標都是不可或缺的,要改變指標困難,不敢用的觀點,適當的用指標來優化程式,提高執行效率
7樓:匿名使用者
用指標還要c#幹啥?
c#中為什麼沒有必要使用指標
8樓:
c#中會自動管理記憶體,不需要程式設計師手動分配和釋放,這樣可以有效避免記憶體洩露
9樓:匿名使用者
因為有更方便、現成的東西了,例如泛型、委託,用起來遠比函式指標方便,對於變數來說不是也有個取地址的關鍵字ref麼。
實際上,你在使用這些功能的時候,已經用使用指標了,只是我們看不到framwork類庫中微軟已經整合好的**而已。
10樓:
so this nay
c#裡有沒有指標,或者可以代替指標的語句
11樓:孫中呂
任何程式都有指標.
c#裡的指標由c語言的指標本質一樣,只是描述改變了。
講個類的指標.
public class userdata{}userdata user; //這裡的user就是指標,是指向userdata.
var s="字串變數"; //s也是指標。
同理int,long,double,struct等等,都一樣
12樓:匿名使用者
如果是函式的話 在形參列表裡 給引數的型別前面加上 ref使用的時候也要在引數前加ref
如果要使用顯式的指標 也就是*
就在需要使用指標的類 結構前加unsafe然後就可以像c++一樣用指標了
記著在專案屬性裡允許不安全**
13樓:
有指標的,和c一樣,只是書籍一般不提及。
c#裡面指標為什麼會被列為不安全**?。。
14樓:匿名使用者
c#裡面的指標是安全的c和c++裡面的指標會導致不安全**(跟系統環境或者程式設計師自身的能力有關係)
15樓:匿名使用者
指標是直接搞記憶體。搞不好系統就崩了。所以不安全。
指標真的很方便。可以方便的處理一些麻煩的問題。微軟哥不是不提倡的。
只是他怕別人用不好指標就怪微軟垃圾。所以就稱指標不安全。如果有絕對的把握就用吧。
c#中沒有指標,但可以改變值,為什麼
16樓:大娘很
首先 c# 是有指標的;
msdn:為了保持型別安全,預設情況下,c# 不支援指標演算法。不過,通過使用 unsafe 關鍵字,可以定義可使用指標的不安全上下文。
指標 是 用來指向物件的記憶體地址;相當於 c# 的 引用型別;
雖然地址不變,但裡面的值是可以改變的;
你可以瞭解下:c# 值型別與引用型別;
就可以明白這個問題;c# 中類是 引用型別 類裡面的值型別成員也屬於引用型別 儲存在記憶體堆上,
17樓:
用ref和out關鍵字,可以做到類似指標的功能啊
為什麼這麼多人喜歡木心,為什麼這麼多人喜歡木心?有哪些讓人記憶深刻的詞句
木星內部的世界,木心人 為什麼這麼多人喜歡木心?有哪些讓人記憶深刻的詞句 從前慢記得早先少年時 大家誠誠懇懇 說一句 是一句 清早上火車站 長街黑暗無行人 賣豆漿的小店冒著熱氣 從前的日色變得慢 車,馬,郵件都慢 一生只夠愛一個人 從前的鎖也好看 鑰匙精美有樣子 你鎖了 人家就懂了 大概大家都喜歡他...
c語言為什麼會有指標?c語言為什麼要有指標呢?
指標是c中的精髓,如果沒有,應該說就是一種很平庸的語言,從本質上說,指標體現了von neumann體系結構計算機也就是當今計算機的特徵,記憶體資料按照當前的解釋決定其意義,其指標的運算更是以機器實現的方式展現出來。具體的主要原因大致如下 1 函式的引數傳遞 c語言只有傳值這樣一種方式,在函式體內不...
為什麼這麼多人欺負神起?
最反感發生點什麼事情,就把事情上升到國家高度,再加上有些記者人云亦云,在沒有任何有力證據的情況下,寫些模稜兩可的報道。現在事情鬧到眾人皆知,可是有什麼事實依據嗎?沒有。還有一件事,就是一個女生辱罵 因為她是一名仙后,造成現在全國人民群攻仙后,理由就是她是一名仙后。可是,大家有沒有想過,她憑什麼代表廣...