• 知識庫
  • 0

c語言、指針、間接運算符的用處,存在意義是什麼?

小月fbviod0a6672:我個人覺得,相對於&被稱為取地址運算符,*應該叫做尋址運算符,*的作用是訪問其操作數所指定地址的內存位置。你問這個星號是什麼作用,其實是在問指針是什麼作用吧。要說指針的作用,首先要從內存說起。假設你是32位吧。對於一般的32位應用程序來說,內存是一個char數組(或者說8位整型數組也可以),數組長度是2^32,而指針就是這個數組的下標……嗯,我們把這個數組叫mem吧。如果你要嘗試的話,那麼可以這樣定義這個數組:char* mem = (char*) 0;通過指針你可以訪問內存中的所有位置,比如mem[0] = ‘a’;,或者*(char*)0=’a’;//因為這個位置是不允許修改的所以這麼做會完美觸發“該內存不能為written”(不過這個神奇的翻譯錯誤隻存在於xp中)。

c語言、指針、間接運算符的用處,存在意義是什麼?-圖1

隗鶴真518a:都說指針是C的精髓和核心,指針這個概念確實在學習初期覺得有些莫名其妙,不易理解。我們這裡盡量舉幾個指針確實有作用的例子來爭取更瞭解指針。舉個例子,我們想象一下,假設某公司有一批文件需要各個組共享。那麼一個顯而易見的方法就是,每個組需要各個組共享。那麼一個顯而易見的方法就是,每個組需要用的時候,都復印一份文件就好瞭。但是這個方法有幾個小毛病。第一,如果文件太多,比如有5000頁,還已經分類完畢,訂書機弄好瞭,那復印的時間成本和空間成本都很高。復印一份要好久,還弄得到處都是文件。第二,如果這個文件還需要修改,而且是每個組都可以修改,那麼復印就會導致組和組之間的溝通成本上升。我改瞭個日期,我要打電話告告訴所有的組,哎你們也改一下你們的啊!這出錯率就不用多說瞭吧。那麼另一個思路,就是我就用這一份文件,放到某個地方,然後告訴每個組,這個地方在哪裡,你們自己去看就好瞭。這樣既省瞭復印的時間空間成本,又可以每個組直接在這份文件上進行修改,讓其他組看到。指針就可以起到這個作用。與傳一個很大的結構體(或者其他類型的比較大數據結構)相比,傳他們的地址,然後利用*運算得到實體,再進行運算,會節省時間和空間,而且讓各個函數可以共享某個數據結構。當然,缺點也是顯而易見的,任何一個團隊搗亂把這個文件毀瞭,別人就沒法用瞭。正所謂武器越強大,越容易傷到自己。C提供瞭很多「危險卻強大」的功能,要小心喲!

c語言、指針、間接運算符的用處,存在意義是什麼?-圖2

陳憶嵐92:Mac OS系統, 也就是蘋果電腦的自帶系統裡, 有一個功能叫”替身”. 比如說你有個文件, 右鍵, 調出”制作替身功能”, 你就能用這個替身啦.你可以在自己的蘋果電腦, 或者向朋友借一臺蘋果電腦來, 實際地用一下這個功能, 然後你就知道指針有什麼作用瞭.舉個最簡單的例子. 比如你有你的女朋友的照片, 你把它放在”照片-女友-2017年04月03日”的文件夾裡。你每天想看這個照片, 你需要放在桌面上. 那麼復制一份出來, 就浪費空間瞭。如果你每天又要修改照片, 比如P一下, 那麼復制之就更不方便瞭. 因為你每次修改一下, 還要把你在”照片-女友-2017年04月03日”的文件夾的那份覆蓋掉, 麻煩.我想你已經知道”替身”這個功能的用處瞭。我想你也知道指針的用處瞭。這一切的一切, 都始於這一行代碼:int *p=&i。

c語言、指針、間接運算符的用處,存在意義是什麼?-圖3

您可能也會喜歡…

發佈留言