C語言中的指標為什麼要區別出指向不同資料型別的指標

時間 2021-05-09 15:08:37

1樓:你好

我也想問這個問題, 不過你的比如錯了, 不能寫char *p = "hello,world"; 應該寫

const char *p = "hello,world"; 為了能加深印象 , 原因你自己查查吧.

2樓:Garvey

「位址是整數」這個說法,不對!你只能說「位址可以人為地用整數表示」。這涉及到計算機原理,希望你補補這方面知識。

而且即使我們可以把位址看作整數,也不能把指標都設定成同乙個型別*,因為指標宣告的重點不是位址本身,而是這個位址鏈結著某個型別的資料(所謂型別,就是對01碼的編碼方式)。

問題補充裡,char *p的意思是「生成乙個p,讓它指向一小塊兒記憶體空間,這個空間裡存字串」。如果只有*,那麼計算機就不知道該用什麼編碼方式設定那個空間(char?int?

long?還是float?),這就是C語言接近機器的地方,不像更高階的語言那樣,在編寫時不用顧忌型別,交給編譯器去編譯。

另另:在現有的C語言語法裡, *p的*是個運算子,*p是對指標p進行運算——在等號右邊的話,意思是「讀取p這個位址指向的值」;在等號左邊的話,意思是「把p指向的那個值所在的儲存空間拿來,要存新東西」。

我佛慈悲。

3樓:Pluto Hades

這其實是乙個語言語法糖啊,有型別也就定義的時候多敲幾個字,後續使用加加減減就不用你管型別長度了。

沒有這個,你就得像彙編一樣精確計算並手寫不同型別的移動步長,萬一跨平台型別大小不同那就更糟了。

4樓:C語言答疑課堂

好吧,如題主所說,char *p = "hello,world"; 指標不要型別,就寫成*p = "hello,world";假設編譯器允許這麼做的話,那麼編譯肯定能通過的。

在執行時,假設指標p的值是0x123,當p = p + 1的話,此時你說p應該怎麼加這個1呢?是加1個int占用的位元組大小,還是加1個long占用的位元組大小,還是加1個char占用的位元組大小?

所以這就是在定義指標p時一定要宣告型別的原因。

5樓:

指標,我是說C的指標,真正的偉大意義不在於它本身,而是它支援的運算。

如果不區別型別……請問你每加一格減一格究竟要移動多少距離呢?

程式設計師手算麼?

6樓:

指標有兩種語義

一是記憶體的基位址,

二是指向資料的型別,也就是指向單位的大小是多少。(void*除外)如果沒有第二點,你面對的就是一堆位元組而已。

7樓:薛非

但是指標是乙個存放記憶體位址的變數, 在記憶體編址中位址都是整數,不是都是整數那宣告的時候為什麼不可以直接 *p = "hello", *p = 1234; 呢?

型別也意味著運算規則

對指標做*運算得到的結果不同,甚至有時根本不能對指標進行*運算

8樓:李明

指標所指資料型別定義了指標偏移值的單位。如果指標偏移全部用位元組的型別的話,那就同彙編了,會搞得很複雜,失去了高階語言的直觀性。

9樓:波波桑

C語言裡面有乙個萬能指標(void指標)你完全可以指向任意的空間,用的時候按照你喜歡的方式來用。為什麼要把它轉換為我們需要的型別呢?因為:

目前的編譯器不能自動幫我們識別是什麼型別不同的型別儲存空間是不一樣的,所以我們需要手動來寫明型別

10樓:隔壁王校長

指標如果沒有型別,那麼指標的「++」、或者「p=p+2」這樣的操作,既不知道要偏移多少了。

以p=p+2為例,編譯器會根據p的型別將這個語句翻譯成 p = p + 2 * (指標型別占用的記憶體大小),如果沒有型別,這個語句就沒有辦法實現。但是到執行期,這個東西就看不見了。

11樓:

型別安全檢查是編譯器提供的重要功能,它可以讓你不用操心很多麻煩事。對於C語言,由於其型別系統過於羸弱,你可以用void型通用指標來繞開編譯器提供的型別檢查而自己寫一套型別系統,可參考《object oriented programming in ANSI C》

為什麼別的語言中沒有像C語言一樣有指標?

liouperng 因為現在指令碼語言 函式式語言大行其道,不是正規化不需要,就是為了菜鳥好學。C類語言 C C 有指標,Pascal類語言 Delphi Ada 也有指標。 不胖的羊 為什麼大部分語言都不用指標呢?答案可能是這些語言把該用指標的部分都用C C 寫了,包在標準庫里。指標是大殺器,不敢...

C語言中,對指標變數取位址得到什麼?

已登出 求仁得仁,取位址得位址。C語言裡面,一切變數都是跟澡堂子的那種小箱子一樣,而位址就是鑰匙。取位址就是拿到這個箱子的鑰匙。至於箱子裡面裝什麼,也可以是衣服,也可以是另乙個箱子的鑰匙。有一種很蛋疼的做法,就是從第一箱子裡面拿鑰匙開第二個箱子,從第二箱子裡面拿鑰匙開第三個箱子,可以以此類推。 凍椰...

C語言中,指標的指標的指標,這樣一直下去產生的指標是什麼意義?

你可以超越守恆律憑空得到乙個俄羅斯套娃娃。抖機靈 若干年前用c寫過乙個用4層指標的複雜資料結構。後來因為維護困難,就轉到了c 重構後最高端的就是1級指標。 Bat特白 指標就是位址 記憶體單元編號 位址也要存在記憶體某處。所以指標的指標就是存放位址的位置的位址。不要看太多的 通俗解釋 你明白了記憶體...