C語言,指標問題,C語言,指標問題

時間 2022-10-10 09:50:04

1樓:親切且通竅的毛豆

指標的概念

指標是乙個特殊的變數,它裡面儲存的數值被解釋成為記憶體裡的乙個位址。 要搞清乙個指標需要搞清指標的四方面的內容:指標的型別,指標所指向的 型別,指標的值或者叫指標所指向的記憶體區,還有指標本身所佔據的記憶體區。

讓我們分別說明。

先宣告幾個指標放著做例子:

例一:(1)int*ptr;

(2)char*ptr;

(3)int**ptr;

(4)int(*ptr)[3];

(5)int*(*ptr)[4];

如果看不懂後幾個例子的話,請參閱我前段時間貼出的文章《如何理解c和c ++的複雜型別宣告》。

指標的型別

從語法的角度看,你只要把指標宣告語句裡的指標名字去掉,剩下的部分就是這個指標的型別。這是指標本身所具有的型別。讓我們看看例一中各個指標的型別:

(1)int*ptr;//指標的型別是int*

(2)char*ptr;//指標的型別是char*

(3)int**ptr;//指標的型別是int**

(4)int(*ptr)[3];//指標的型別是int(*)[3]

(5)int*(*ptr)[4];//指標的型別是int*(*)[4]

怎麼樣?找出指標的型別的方法是不是很簡單?

指標所指向的型別

當你通過指標來訪問指標所指向的記憶體區時,指標所指向的型別決定了編譯器將把那片記憶體區里的內容當做什麼來看待。

從語法上看,你只須把指標宣告語句中的指標名字和名字左邊的指標宣告符*去掉,剩下的就是指標所指向的型別。例如:

(1)int*ptr;//指標所指向的型別是int

(2)char*ptr;//指標所指向的的型別是char

(3)int**ptr;//指標所指向的的型別是int*

(4)int(*ptr)[3];//指標所指向的的型別是int()[3]

(5)int*(*ptr)[4];//指標所指向的的型別是int*()[4]

在指標的算術運算中,指標所指向的型別有很大的作用。

指標的型別(即指標本身的型別)和指標所指向的型別是兩個概念。當你對c越來越熟悉時,你會發現,把與指標攪和在一起的"型別"這個概念分成"指標的型別"和"指標所指向的型別"兩個概念,是精通指標的關鍵點之一。我看了不少書,發現有些寫得差的書中,就把指標的這兩個概念攪在一起了,所以看起書來前後矛盾,越看越糊塗

剩下的請去看看吧。

太多了,不能全轉過來。

2樓:

你想問什麼呢?c語言的指標是其區別於其他計算機語言很特殊的特點之一,它是乙個指向其他變數位址的變數,在寫程式時,適當運用指標,可以減少運算量和運算過程。

C語言指標問題

樓主,形參是不能改變實參的值的,如果你想得到你的效果,只能把printf 放入函式裡面才能使你的數字順序改變 抱歉!不是很明白lz問啥 這程式是把陣列a的 n1,n2 的元素順序對調啊,不覺得有問題 還有,你說那 執行後內容沒有變 是不是你看錯了?肯定變的,如第一遍後a 0 4吧。抱歉,只能這樣了,...

c語言指標問題

p c 表示的是變數c的位址指向p,既是指標變數p裡面存的就是c的位址,通過p能找到c,此時 p c.例如c的位址是1000h,c 3.則p 1000h,p 3.p c 表示c的位址存到p指向的變數 p為指標變數,已經指向乙個變數 此時例如p指向的變數b p b p c執行後 c的位址是1000h ...

c語言二級指標問題,C語言二級指標問題

1 通過二級指標去訪問二維陣列需要先給二級指標分配等同於二維陣列行數的一維陣列指標,然後把二維陣列的每行首地址賦值給對應位置的一維指標上。之後就可以通過二維指標直接訪問了。2 參考 如下,可以看具體註釋輔助理解。include 輸入輸出標頭檔案。include 本程式需要用到malloc free函...