在 C 語言中指標的歷史是怎樣的?

時間 2021-05-31 09:19:38

1樓:Crazyjin

型別、變數和變數的值本來就是三個概念、一直都是三個概念。

int是型別,int a 申明了乙個int型別的變數a。pointer是型別,pointer variable是pointer型別的變數。只不過這裡pointer和pointer variable沒有指明具體型別。

這裡舉個具體例子:

int *p; //申明乙個int型別的指標變數p:p代表棧上的一塊記憶體(大小取決於word大小);這塊記憶體只能存放乙個記憶體位址,也就是乙個指標;這個指標指向的記憶體中存放的只能是乙個int型別的資料(編譯時檢查)。

p = (int *) allocate(sizeof(int)); //先在堆上分配一塊記憶體,大小取決於int,並將這塊記憶體的第乙個位元組的位址賦值給p;由於allocate的返回值的型別是void *,所以要先做型別轉換。

*p = 0; //將int型別的常量0存入指標變數p的值(乙個記憶體位址,也就是乙個指標)指向的記憶體

int q = *p; //將指標變數p的值(乙個指著)指向的那塊記憶體中的int資料賦值給q

int *m = &q; //先申明乙個int型別的指標變數m,然後將變數q代表的記憶體塊的第乙個位元組的位址賦值給m;&叫做取址符;

int *n = p; //將指標變數p代表的內中塊中的資料copy到指標變數p代表的內中去,這樣變數p和n的值都指向了同乙個塊記憶體。

總結:型別、變數和變數的值一定要分清楚。指標變數和別的型別的變數一樣:

都代表棧上的一塊記憶體。變數的型別決定了變數代表的記憶體的大小。變數的值指的是變數代表的記憶體塊中存放的資料。

2樓:Code Diy

pointer : 指標指向乙個特定位址

- 預設沒有指定讀寫資料的方式

- 可以轉換成pointer var來修改指標資料的讀寫方式- 在這個指標上讀寫資料的時候按照var型別進行讀寫

3樓:OFFLINE

不清楚歷史是怎樣的.

但位址本來就是乙個無符號整數.

關鍵是語法的設計者, 如何去讀寫這個位址.

需要乙個直觀的語法.

例如某語言設計者可能會考慮這樣

uint addr=addressof(myarr)addr+=4;

setaddress(addr,(int)123)這樣設計語法是挺彆扭的.

C語法是挺合理的了.

雖然我覺得 *ptr = 123 這種寫法還是有點彆扭..

但還會有更好的語法麼?

4樓:靈劍

你可以把這裡的指標理解為乙個右值,比如&a這樣的,而指標變數理解為左值,就是int *p這樣的,可以儲存、修改、讀取的東西。指標右值是個位址,而指標左值(指標變數)是個能存這個位址的東西。

5樓:

指標就是位址。free() 怎麼知道分配的記憶體是多少 ( 因為 malloc 分配記憶體的時候,把一些資料放在返回的位址的前面了。

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

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

C 語言中指標陣列和陣列指標 函式指標 指向函式的指標等等該怎麼理解?

ga6840 direct declarator IDENTIFIER declarator direct declarator direct declarator assignment expr direct declarator declarator direct declarator poin...

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

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