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

時間 2021-05-11 22:10:45

1樓:悽臨雨

指標=型別+虛擬記憶體位址值(整數)。

指標運算=根據型別確定的寬度對位址值進行修改。

其中c語言裡的型別,比c++裡的型別的功能弱的多,所以你覺得c的精髓是指標,在c++裡就是個基礎操作,沒什麼大不了的。

因為c語言的語言功能太貧瘠,所以只能靠記憶體位址的修改來做事,沒它就寸步難行。

2樓:Howard J

語言即計算機。不同的語言帶給我們不同的計算機抽象。

組合語言,我們看到的是乙個個暫存器,開關,高電平,適合最低層程式設計。

c語言,我們看到的是函式,指標,已經沒有暫存器那些了。

再抽象,我們看到的是物件,是泛型,沒有指標加減之類的東西了。

3樓:迷宮小巷

簡單來說,因為C就那點破feature,如果你把指標乾掉,那這語言就完了。相反,如果你乾掉struct,乾掉union,乾掉陣列,甚至你把if-while都乾掉,留下malloc和goto,則最多就是程式難寫一點而已。所以這就是為什麼C語言的精髓是指標了,因為他只有指標可以用了。

4樓:詩酒趁年華

C++是一把沒有護手的刀,稍不注意就會切到自己手手。但一旦掌握了它,練成了絕世武功,你能做的事情比你用那些安全刀多得多。

不過,大部分人其實並不需要接觸這部分武功。

5樓:五小

其實不是指標是C語言的精髓,

是給你機會對記憶體讀寫更高效且精確的利用和規劃。

在現代的程式設計世界裡,新的語言都當你是不懂記憶體的傻子,給你做越來越輕薄高階的尿布防止你胡亂排洩,只有C把你當懂記憶體的成年人,不提供尿布。

沒了尿布你跑得快跳得高能把別的小朋友打得屁滾尿流,然而沒了尿布很多人要學會自己找到廁所,自己脫褲子,自己解決大小便,有的小朋友就不能適應了呀。

6樓:C語言答疑課堂

關於指標為何是精髓,我還專門寫過文章來闡述,有興趣的可以看看:C語言指標專題--指標怎麼就很靈活? - 知乎專欄

其實說指標是精髓,我覺得有點過了。C語言中那麼多型別,那麼多資料結構,要我說都是精髓,怎麼就變成指標是精髓,其它人就不是精髓了?

我覺得這樣說比較好:相比於其它大多數的程式語言,指標是C語言的一大特色。這句話沒有把指標捧的很高,但也沒有貶低指標。

指標的好處就是可以直接操作記憶體,這就是指標的特色。

7樓:朽木雕花

我給大家做Python培訓的時候,我這麼講的:

Python裡面的資料型別只有一種,就是指標,沒有類似C語言中的整數,浮點數,結構體這些東西了,唯一有點特殊的地方是小整數

由此產生了Python中的兩種型別,一種是可變變數,一種是不可變變數。

所謂的不可變變數就是指標所指向的內容是不可變的,比如元組;

所謂的可變變數就是指標所指向的內容是可以修改的,比如陣列和字典。

然後使用id函式給大家演示

8樓:羋楚

個人覺得指標確實是C語言的精髓。

很多人不能明白為什麼,可能是不明白指標到底是什麼,在我的理解中,指標是資料匯流排和位址匯流排的值。而從彙編到C的進化,就是從機器語言到智慧型語言的真正進化。

後來的所有語言其實都是基於指標,因為後來的所有語言歸根結底都是操作匯流排。

9樓:小強

題主知道這個問題的答案也沒有用?要理解指標的作用起碼你應該知道計算機的從上到下的各個環節的實現原理,所以如果能夠使用好指標側面反應了你掌握了比較全面的計算機知識,但是如果你是電腦科學專業的本科畢業生,連這也沒搞懂,那說明你根本還不值得拿到畢業證。

所以題主你問這個問題?只是證明了你計算機方面很多基礎知識都還沒有掌握,說這句話不是說你菜,只是說明別妄圖走任何捷徑,更別以為計算機就是能寫個有指標的程式就完了。

現在這個社會,以下名詞:《軟體,程式設計,計算機,雲計算,大資料,人工智慧,》報紙上,電視上,網上所描述的,基本和真實差了不知一點半點,所以就像以前江湖郎中可以大街小巷坑蒙拐騙,現在不過是變成了個領域。

僅此。至於樓上說什麼gpgpu的,就是個例子。

10樓:Andy Denker

因為組合語言不必講指標,[ ]就是存著乙個數字,告訴你去記憶體的哪個編號找要找的東西而已。

太脫離底層的高階語言也不必講指標,因為不需要直接管理記憶體。

C恰好介於二者之間。指標就是間接定址,有什麼難的。覺得指標難,無非就是C語言學個半吊子,計算機原理學個半吊子的傢伙而已。簡單的東西勉強能應付,稍微綜合一點,就原形畢露。

11樓:

C語言中,沒指標就無法操作堆,只能操作棧了吧。靠值傳遞,全域性物件維護成本太高了。

或者直接自己操作暫存器,那麼還不如用彙編。

12樓:JIN

指標是程式執行時記憶體"模型"的體現。直接反應儲存器的狀況,清晰,明了。

同感的還有組合語言和暫存器。

熟悉了這些,會有一種從計組原理(硬體)到程式語言(軟體)的暢通感。。。

13樓:Berry Geek

請看一下例子, 作為高階語言竟然可以這麼靈活.

class C

};int main(void)

; C *ptr= (C*)&array[1];

ptr->print();

ptr++;

ptr->print();

return 0;

}結果:

num1: 61 num2: 62num1:

63 num2: 64指標,和引用不一樣.引用只看得見物件,而指標看見的是記憶體.

每乙個記憶體bit都可以通過指標被玩弄於鼓掌之中.

14樓:

C語言是做演算法最好的語言,指標的實現與LOC,MOV等彙編命令接近更適合做演算法優化,有時間了解下程式堆疊,做做底層優化就知道為啥指標重要了。還有再努力也不要進入天才很多的領域,所以建議學C++

15樓:張磊

指標是記憶體訪問模式的必然結果,任何程式都離不開;即使開發語言不提供指標型別也一樣要使用指標。而提供指標型別的語言當然程式設計者能夠獲得最大的靈活性。

16樓:riteme

對於C語言:

沒有更安全的引用,沒關係,我有指標

沒有方便的委託,沒關係,我有指標

可是指標不好判斷合不合法啊,沒關係,記得設為NULL就好了~沒有指標的C你敢用嗎?

17樓:何飯

指標就是乙個存有記憶體位址的變數。不是一根針。也不是手指頭。其實翻譯成指標比較爛,應該翻譯成位址變數。

比如你定義了乙個變數 char c; 如何知道它的位址呢? 就要用char *p = &c;

這時, p就是c的位址,*p表示p位址中的東西,那自然就是c了。

這個在和記憶體打交道的時候比較用的到,用來指示某段記憶體的起始位址。

18樓:Jim Liu

從裝置層面,操作硬體,就需要定址;

從程式設計層面,資料結構就需要依靠指標去實現;

從軟體設計層面,介面、物件、函式式也好,最終也是依賴指標實現的;

其它程式語言也是依賴C實現的。

就目前計算機硬體體系結構,其底層注定是通過「指標」這種東西實現的。這是必須的實現方式,找不到其它代替方法吧?

至於是否是C語言的精髓,只能說指標是雙刃劍,程式用好了就是精髓,用不好就是自宮。

C語言是非常靈活、精簡和工程實用的,這就意味著也難以駕馭。初學者的話沒有幾年功夫,特別是缺乏對硬體更深入一些了解,自然很迷惑。最簡單的,把資料結構的基礎打好,對指標就能明白一二。

19樓:

C是一門系統語言,主要的強項是開發系統,包括作業系統,特別是在嵌入式方面,C是無法取代的語言。

舉個例子:比如你想複製乙個一段資料,如果沒有指標,你可能就需要重新開闢記憶體空間,重新複製資料等,但是,如果使用指標,指標把指標指向你需要複製的記憶體區域即可。

在核心中,這樣的使用非常普遍,可以說, 指標的使用大大降低了開銷,不論是時間還是空間,在一些特殊的場合,不使用指標甚至無法很好的工作。比如,你想建立乙個動態字串陣列,你可以這實現,首先建立乙個字串指標陣列,然後讓這些指標元素指向不同的記憶體即可(也就是你所分配的不同的字串)。

20樓:Kenneth

澄清兩點:

1.通過指標能實現所謂的「傳引用」而不是「傳值」,本質上節約了資料傳輸效能

2.光支援指標不是c出彩的地方,要支援指標的運算(對指標加減,甚至取指標)才是c類語言強大的地方。只支援傳引用的語言大把大把。

所以說前面很多回答的人都是一知半解,完全沒有答到點子上。

21樓:

C語言大多是直接操作記憶體裡的資料,只有指標可以相對自由地」指來指去「。稍微大點的程式用上指標就很方便高效了,其它方式不太靈活。

22樓:

1.因為搞不明白指標的人多,搞不懂東西就會被認為是精髓。

2.因為有人說,又有人跟風,聲勢造大了就真的把它當精髓了。

3.因為C和指標相關的知識點很多,所以被認為是精髓。

4.因為可以依靠指標來實現很多東西,所以被認為是精髓。

6.你來說

7.你來說

8.你來說...

23樓:思羽

其實你只要想到,無論多複雜的演算法、程式、GUI等等,本質都是按照一定順序操作某些記憶體(memory)。

而指標就是用來操作這些記憶體的。

24樓:chenlie

指標的值就是乙個記憶體的位址,其資料型別就是乙個無符號的整型。一般情況下64位機器的指標長度大小為64位即8位元組,32未系統為4位元組。所以可以通過C中的sizeof(指標變數)得到機器是64位還是32位。

指標的值就是記憶體的位址值,不過這個位址是虛擬位址。通過指標在程式中可以訪問記憶體(虛擬記憶體),這讓程式更接近計算機的底層,可以實現其他一些語言無法實現的能力。

25樓:幻影火槍手

看了以上回答,收益匪淺,但我覺得有一點沒提及:

指標在所有可執行的程式中都存在,不管你用什麼語言編寫的,程式裡頭肯定有用到指標。

我們說到一門語言沒有指標的時候, 實際上是從語言設計的角度上讓程式設計人員免於直接使用指標,避免各種記憶體錯誤。

所以,只有用C語言程式設計,開發者才能如意並方便地操縱指標,不管是什麼型別的指標,不管指向啥位址。

其他的高階語言不行。

嗯,指標是C語言的精華,如果不需要用到指標的話,選其他語言來實現更輕鬆。

26樓:

這個指,真是上帝之手。

不懂的話,看再多回答也不會有多少感觸。透徹理解,豁然開朗後肯定知道我為啥如此評價了。例子還真難舉,先容我回憶回憶後續再補。

27樓:宋歡

高階語言的一些所謂的高階功能,其實就是在封裝指標,例如C#裡面的委託,說白了不就是指標函式嘛。

由此看來,指標不僅僅是C語言的精髓,也是C#的精髓哦。

28樓:楊勤榮

據我所知,在高階語言裡,C的指標是操縱硬體的唯一方式,有了指標你才能和真實的世界打交道。

有人說我可以調作業系統的API來控制外面的裝置,其實作業系統底層API(包括BSP),裡面也是通過用指標去訪問CPU的狀態位、系統匯流排、各種卡的埠來實現的。

有人說我傳送訊號產生系統中斷也可以和外面互動,其實系統中斷的時候是去調中斷服務程式,裡面也是大量的指標操作。歸根結底還是指標操作。

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

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

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

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

C語言的指標是 ptr還是ptr?

舒默語 其實 並不是和 ptr 連在一起的,你可以寫 int ptr,左右兩邊的空格都是可以隨意的,所以 ptr 是指標,它儲存的值是乙個記憶體位址,但是 ptr 這個變數是指標變數,至於 就是取拿個記憶體位址裡的值。最重要的作用其實是和前面的 int 串在一起的,它表明了ptr這個位址上儲存的變數...