為什麼指標作為c語言的靈魂,用的地方卻很少甚至幾乎不用?

時間 2021-05-10 16:23:05

1樓:紫葡萄

很多地方會用的,最簡單的乙個應用,函式多返回值問題

比如乙個函式要返回4個數,像go支援函式多返回值(其實底層也是用指標實現的)

在C中只能用C指標做,傳入4個指標,在函式內修改指標的值

2樓:小北

然後說用處不大,這是題主自己的理解吧,實際上工程裡根本離不開指標,這個展開講就太豐富了。等題主上過計算機組成原理或者微機原理,對記憶體有一定的概念以後會對指標的理解更為深入的。

3樓:JT蘿蔔頭

不是用地方少,只要你用不同角度看待問題,你會發現任何記憶體操作都離不開指標。指標無處不在。書本上對指標的說法是指標就是位址,這裡說的指標不是指標變數,概念要區分開。

例如:int a; 你可以理解為,把一段4個位元組記憶體的首位址命名為a。使用變數a時實際是使用指標。

4樓:「已登出」

用的很少?很可笑的說法,C語言首先是面向系統,對多數的埠訪問是通過指標實現的,怎麼叫用的很少?即使撇開系統層面,傳統應用層面,如影象解碼,傳遞乙個影象或音訊都是通過指標,怎麼叫用的很少?

幾乎所有的批量處理與塊操作都離不了指標,而且很多不是用陣列可以替代的。指標是C語言的靈魂,沒有指標很難說會有現在的C語言。建議先把微機原理或計算機體系學好,理解指標的真正含義,否則不要學C。

建議先把這本書仔細讀懂,再回過頭好好理解C

5樓:

老師說的都對,指標確實是c語言的靈魂,同時能不用盡量不用,這一點也不矛盾。因為,對於初學者來講,指標在沒有完全掌控之前,很容易用錯,不僅考試如此,實際工程也是如此,指標用錯的後果很嚴重,輕則記憶體洩漏,重則程式崩潰,而且指標bug也不好查。對於c語言高手來講,什麼時候能用或必須用指標,什麼時候不用也是心知肚明的。

乙個正式的c語言專案,肯定會有很多指標,不存在用的很少的情況。但是用指標也會很克制,不能濫用。而對於初學者,能不用盡量不用的意思是為了減少錯誤機率而已。

6樓:OhYee

畢竟考試都掛了老師會很尷尬,所以不考或者不要求你們用但是c用的還挺多的吧,要實現非引用傳參的地方基本上都是指標實現吧(比如要在c裡實現面對物件),以及陣列本身也是指標,只不過用封裝了下

【感謝 @CC仕

@IceBear

@暗夜幽靈 的指正。指標和陣列不等價,指標可以指向任何記憶體,這塊記憶體可以是陣列,也可以是乙個結構體或是任意內容。對指標而言它並不知道這塊記憶體是什麼,但是程式設計師在知道指標對應內容的情況下,可以將其當做乙個陣列、結構體或是其他型別操作。

這種操作帶來了很高的靈活性,也帶來了很大的隱患。可參考https://www.

指標應該是所有程式語言的靈魂,只不過別的語言可能封裝的比較好,讓使用者看不出來而已。(大家每天都在用,只不過自己沒意識到,應該不影響把它叫做靈魂吧)

7樓:emmm

c裡說到底只有乙個東西,就是指標。老濕之所以說盡量不用指標,是因為指標是把雙刃劍,用的666的人吊炸天,似懂非懂的人用起來可能會有各種莫名其妙的問題。

程式猿本來就只適合極少數人,如果老濕要求你們每個學c的人都要做程式猿,可能絕大多數都不能學c。

8樓:diaodiaoidaoidao

用處不大?

我們知道,在現在主流的高階語言當中,C是與底層最接近的,所以它提供的基本資料型別也比較「原始」,這就導致了它不能直接支援像其他語言那樣複雜一些的變數型別,例如可變長陣列,字串等。然而,這些資料型別又是非常常用的,所以,C提供了一種比較「原始」的方式,通過直接利用記憶體位址來運算元據,讓使用者自己實現各種高階的功能,自由度非常高。

別的語言沒有,那是因為它們封裝好了,不是沒有,而是不允許或者無需使用者直接操作指標。

9樓:皮卡丘黃了吧唧

不是的,你學到資料結構就能明白的。

學完C並不能做出什麼東西來,再學乙個資料結構你也做不出東西來。但是你想做出東西或者是要研究更深層次的演算法等等,資料結構是必須的!

建議把指標和離散數學的基礎打牢,學到鍊錶,棧,隊,樹,圖等等的時候會容易很多。

雖然我C用的不好,但是我覺得先學C並且強調指標的重要性是很正確的,你能把上面提到的知識理解的很透徹。

比如我用lua寫過遊戲裡的Brian(角色的AI),用到的就是資料結構裡面的樹。

10樓:康殼

用的很少你確定?c語言最沒法被其他語言取代的地方就在於指標了,這也是c的精髓所在。事實上我接觸的演算法的c檔案指標幾乎是無處不在,首先就是大部分函式都是在用指標傳遞,其次是很多語句直接在位址上操作要簡潔而且高效。

我不知道題主接觸的都是些什麼程式,反正對於我來說這個問題是不存在的。

11樓:DNFL

又刷到這個問題,補充一點,你現階段只是為了考試而已,把考試過了就行。

很簡單,沒有指標你怎麼記憶體管理,怎麼用堆空間,這是很現實的。當然,指標實現了對位址的基本抽象,使用位址也可以達到同樣效果。在其他高階語言中,對指標進行進一步的抽象封裝,搞出來引用,然後這些東西本質都一回事。

另外陣列只是個編碼期的概念,一編譯就沒了,這是為啥,陣列做實參,就變指標了。

12樓:

不用指標?

你學C語言寫的乙個程式,printf(「hello world「),這句話裡面都用到了指標。

幾乎不用?你不知道用了罷了,應該說幾乎見不到不用指標的地方,包括陣列都是常常配合指標使用的。

13樓:在ios寫bug的傑克

C語言的靈魂—指標

指標是什麼

在電腦科學中,指標(Pointer)是程式語言中的乙個物件,利用位址,它的值直接指向(points to)存在電腦儲存器中另乙個地方的值。由於通過位址能找到所需的變數單元,可以說,位址指向該變數單元。因此,將位址形象化的稱為「指標」。

總結來說,指標就是指向位址的變數!

指標的作用

c語言指標可以有效地表示複雜的資料結構、動態分配記憶體、高效地使用陣列和字串、使得呼叫函式時得到多個返回值等。指標的應用往往與陣列聯絡在一起,是最頻繁的,也是最基礎的。引數傳遞時只需要拷貝位址值,提高程式的執行效率。

有效的表示資料結構,能動態分配記憶體。

指標指標的語法

指標變數的定義: 型別 * 指標變數名 &:表示取位址操作 *: 表示取位址中的值

怎麼去理解指標

大家可能一時半會可能很難理解指標含義。我們的計算機都會有乙個記憶體,並且這個記憶體的每乙個部分有乙個標記表示它的位置,這個標識就是我們的位址,位址對應的區域存放的就是我們的資料(值)。就像我們住酒店,酒店是記憶體,門牌號是我們的位址,住在房間裡的人就是我們的資料!

14樓:ZA139

現代計算機基本上一切操作實質上都是使用CPU控制記憶體。指標賦予你「直接」操作記憶體的能力,這也是C語言的精髓。操作記憶體更加貼近計算機的本質。

因為任何與語言最終要翻譯為目標機器語言才能執行,機器語言就是對記憶體的一系列操作。

所以C語言相較於其他語言的優勢就是他更加貼近底層,簡潔高效是它最大的優點。

但是賦予程式設計師直接操作記憶體的許可權,也就代表了對於普通程式設計師,出錯的概率會提高,而且後果也較為嚴重。這也就是為什麼你們老師要求你們少使用指標,因為你們作為剛入學的學生,大部分人剛剛入門,隨著之後對於計算機底層的深度學習和理解,也就可以大膽使用了

15樓:青陽惗一

因為希望同學們過個好年呀,不然考指標,別說大一,就算學到大四學四年,往深了考,也能給你們全考掛掉。開個玩笑。如果是軟工,電腦科學類專業的學生,之後肯定要學資料結構,全是指標,有的是地方考,C不急。

指標作為C的一部分,C是一本書,指標可以單獨再出本書,要一起考,得讓你們考兩張卷子

在大一的話,那肯定是上學期,所以先學C,這是基礎,學了C才能學別的,等到下學期要是軟工這類專業的肯定就要學資料結構,簡單粗暴的說,資料結構整本書都是指標串起來的。

而資料結構的重要性於C語言,猶如血液對於人。

16樓:張逸群

我認為c語言的靈魂確實是指標。至於指標能不用就不用這句話我認為更傾向於一種考試策略,指標由於較為抽象,容易出錯,在不熟練的時候且答案不唯一且要求最終分數的考試中,給出能不用指標就不用指標的策略很正常。

指標的力量在資料結構中會展現出一部分,慢慢來。

17樓:暗夜幽靈

你覺得用的很少是因為考試故意這樣的,因為這樣的話成績能好看不少,換句話說老師教的是考試專用版本c語言。

換到真正的c專案,指標結構體滿天飛。絕大多數函式的參表裡都能看到指標,而且常用的資料結構也都是依賴指標實現的。

18樓:雪凰

因為幾乎任何需要一些高階抽象/設計模式的地方,都依賴於指標。

策略模式需要函式指標來指定「策略」;

要實現一些類似oop多型的性質,也需要指標;

動態記憶體管理,依賴於指標;

大部分鍊錶/樹等動態的資料結構的實現,依賴於指標;

這也是用c語言幹活很難的原因,語言本身幾乎不提供任何高階特性,只提供了實現這些特性的工具——指標。

指標只是c語言語法裡很小的一部分,但是卻是更廣闊的世界的門鑰匙。前半句話是考試可以不用指標的原因,後半句是指標是c語言的靈魂的原因。

為什麼說指標是 C 語言的精髓?

悽臨雨 指標 型別 虛擬記憶體位址值 整數 指標運算 根據型別確定的寬度對位址值進行修改。其中c語言裡的型別,比c 裡的型別的功能弱的多,所以你覺得c的精髓是指標,在c 裡就是個基礎操作,沒什麼大不了的。因為c語言的語言功能太貧瘠,所以只能靠記憶體位址的修改來做事,沒它就寸步難行。 Howard J...

c語言指標內容為什麼無故改變

暮無井見鈴 return 語句返回 name 所隱式轉換而得的指向 name 首元素 name 0 的指標。從 main2 退出的時候,其中 name 物件的儲存期和生存期就結束了。語義上我們可以認為這次呼叫中為 name 分配的儲存在退出函式後就是沒了。從而這個指標值變成懸垂了,通過該指標值解引用...

(C語言)位址為什麼要變成指標才能賦值給指標變數呢?

szouc C語言中所有資料都具有兩個屬性,乙個是值,另外乙個是型別。即使值相同如果型別不一致也是不同的資料。有一道題 小區內有乙隻狗叫Oscar,有乙隻貓也叫Oscar,大晚上有人喊 Oscar 請問他找誰?Oscar 找我幹嘛?位址是乙個整型資料,而指標具有 指向物件型別的指標 的型別。因此即使...