c 中指標的值是它所指向的位址嗎,還有指標和首位址有什麼關係,為什麼要宣告指標型別?

時間 2021-05-11 18:55:57

1樓:Alpha

指標的值是它所指向的位址嗎?

是的,嚴格說是虛擬記憶體位址(區別於實體地址)。

指標和首位址有什麼關係?

為什麼要宣告指標型別?

只有指定了型別,指標在做定址操作(*p)的時候才能後確定從首位址(指標值)開始取多少個位元組(由型別確定)的內容;以及做算術運算(僅加減法)的時候,才能確定首位址(指標值)需要增加或減少多少個位元組(由型別確定)。

2樓:餘朔鈺

把指標當成一根線纜,裡面有若干根細線。這條線纜連著乙個大櫃子,細線連著櫃子上的抽屜把手。

指標型別為void時,你只知道這是一根線纜,至於想順著這條線纜找到連著哪個抽屜,那不好意思,不知道!如果有型別,那麼你就可以把線纜剝開去找第x個抽屜的線了。

其實很簡單,指標只是指向乙個位址,型別只是告訴你指向的資料大小,其中子元素排序方式,從而可以偏移到每個子元素而已(如果是復合型別的話

其中所謂的首位址,就是這個指標指向的位址。訪問指向的資料子元素就是拿這個首位址加上覆合型別中子元素相對偏移位置。

struct A

int a;

char b;

A* ptr;

ptr->b == ptr + (0 + sizeof(int)) ;

3樓:

大神們回答的都很好了。。

偏個題,當時學C時候,就是指標那塊不夠熟練,感覺一直理解停留在表面。

這學期學了簡單的組合語言之後,對指標的理解更進了一步,對指標操作記憶體的原理有了一些認識,建議題主學完C或者C艹之後,可以簡單了解一下組合語言。

然後這類問題。。還是建議先仔細看書,看不懂的自行搜尋一下...

4樓:鄭越

1.指標的值是它指向的元素的位址。

2.首位址一般用在陣列中,指的是陣列名,它能夠被引用,就像乙個指標變數,e.g. a[3] 等效於 *(a+3)

3.宣告指標型別是為了說明指標指向元素的型別,用於分配合適的位址大小。

建議先 Baidu/google :)

5樓:d41d8c

把指標的值當成不透明的東西好了。就像如果不是修汽車,不需要在意汽車的引擎蓋下面有什麼。如果不是遇到繞不開的坑,不需要在意指標值是什麼(大概地說,指標值可以轉換成乙個數值,除此之外指標還有隱含的provenance,雖然後者主要影響編譯器的語義檢查)

宣告指標型別的乙個明顯作用是為了確定解引用運算子的型別,比如對於 int *p 和 float *q 來說,*p 和 *q 的型別是不同的。

型別的作用如允許基於型別的別名分析、與型別相關的檢查(通過確保操作使用了正確型別在一定程度上保證程式正確)、允許對不同型別採用不同操作(如C語言的除法、C11的_Generic),我覺得就無需多說了。

c語言中指標指向的非指標變數不能使用 或 嗎

大灰灰老師 學術概念上不太正確 關於 unary 的定義 但實際上是對的解釋 C語言中,所有 unary operator 單目運算子,優先順序都是有著 left to right associativity 的比 right to left 的高,即放在被操作量右邊的先算。例如 p 先算右邊的 s...

在c語言中指標就是可以變化的位址嗎?

僅僅說對了一部分。1 的確,在絕大多數場合,指標是 變化的位址 我們開拓一下思路 變化的位址 的反義 是 不變化的位址 對嗎?沿這個思路,想一想,指標是否可能是 不變化的位址 int const p 指標p能變化嗎? 我認為,不一定 指標不僅負責儲存乙個位址,還負責儲存,它能管轄的記憶體範圍 例如 ...

C 中指向類成員指標的賦值副本用做模板引數為什麼不行?

因為這是語法。在C 11,只允許乙個指向成員的表示式 constexpr 作為模板引數,也就是 AA i 而不允許使用 pi.同時,正在擬定的新標準的草稿中對這個語法做出了改變。現在模板引數只需要乙個已經轉換成constant expression 的型別。所以在正在擬定的新標準中,題主的寫法是可以...