#1
|
||||
|
||||
有關C語言的指標
有關指標,我想打個比方來說,請教一下各位先進,這樣理解是否正確?
int *x; int &y; 在這裡我們用儲物箱來比喻記憶體(內存)。 &y就是指例如第幾號的箱子,而*x則是指第幾號箱子裡的東西是什麼? 這樣比喻對嗎? 再來,int 的屬性是表示已預先留了 4 byte的記憶體空間給 x or y,是嗎?例如一個箱子代表一個byte,int *x 是表示我已留了四個箱子給x,將來等它指定給某位址的陣列後(即幾號到幾號的儲物箱),會將某陣列裡面的內容copy一份出來放進x的箱子裡。還是根本沒有,x只是告訴你將來要去某個位址的記憶體(箱子)去用裡面的內容?x本身不占用任何箱子? 而假設 char *x; char string[]="hello world!"; x=string; 請問,此時x裡是什麼東西? 希望我說的話大家能看懂我想表達的東西 thanks |
#2
|
|||
|
|||
int *x;(x是指向int变量的指针变量,就是门牌号;*x是x变量所指的存储单元)
int y; &y(这个是指针变量y的地址,就像门牌号) 也可以理解为:x(&y)就是指例如第幾號的箱子的号码,而*x則是指第幾號箱子裡的東西是什麼 x=&y就把y的地址赋给x了,*x里就是y的值了。 int 的屬性是表示已預先留了 4 byte的記憶體空間給 x or y,是嗎 只是规定可以指向int变量的单元,但开始并不指向任何实际单元,只有赋值(例如x=&y)后才指向实际单元。 而假設 char *x; char string[]="hello world!"; x=string; 請問,此時x裡是什麼東西? 此时x里是"hello world!"的地址,就是门牌号
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |
#4
|
||||
|
||||
似乎有點搞懂了,試說理解如下:
int *x, char *y; float *z; 它們所代表的意義就是,編譯器在看到 int *x之後會知道這是一個「指向」一個占有四位元的整數的指標,之所以要讓編譯器知道占幾位元是因為,假設*p指向第一個位址是001234(我這裡的位址是隨便說的,先當成是十位數的好了。),那麼一直到001237的記憶體中的內容就是應該存取的內容。 如果是char *y,那麼編譯器就會從y指到的第一個位址,假設是001000,再加一個位元001001,這裡面的內容是該變數的內容。 這就是為什麼使用指標時,前面也得先定個型別(型態),那是因為指標事實上都只指到第一個位址,後面要取多少憶體的內容得靠前面的型別宣告來確定。 是這樣嗎? 但純以 int *x來說,請問x本身有沒有用到記憶體?如果有用到,是配多少給它?據我google的初步結果,指標占的大小是一樣的,但和作業系統是32 or 64 bits有關。 thanks |
#5
|
|||
|
|||
x本身当然占用记忆体,如果是32位系统,一般占用4字节;如果是64位系统,通常占用8字节。
__________________
收购各位版友的四字母com、数字米com/net/cc、三杂米com、拼音米。价格随行市价。站内联系。 |