PDA

查看完整版本 : 有關C語言的指標


哈啦
2014-05-28, 04:07 PM
有關指標,我想打個比方來說,請教一下各位先進,這樣理解是否正確?

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裡是什麼東西?

希望我說的話大家能看懂我想表達的東西~embarass:

thanks

yumi
2014-05-28, 08:21 PM
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!"的地址,就是门牌号

哈啦
2014-05-28, 08:29 PM
請問,此時x裡是什麼東西?
此时x里是"hello world!"的地址,就是门牌号

:bow

:bow

many thanks!

哈啦
2014-06-10, 06:13 PM
似乎有點搞懂了,試說理解如下:
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

yumi
2014-06-10, 08:25 PM
x本身当然占用记忆体,如果是32位系统,一般占用4字节;如果是64位系统,通常占用8字节。

哈啦
2014-06-10, 08:27 PM
x本身当然占用记忆体,如果是32位系统,一般占用4字节;如果是64位系统,通常占用8字节。

~yes 謝謝。:bow