当前位置: 技术问答>linux和unix
struct pointer問題
来源: 互联网 发布时间:2016-05-22
本文导语: struct S_Struct { int numA; int numB; }; struct S_Struct *stt; (gdb) p stt $1 = (struct S_Struct *) 0xb7f2e0b0 這個address為尚未分配,系統隨意給的 (gdb) p &stt $2 = (struct S_Struct **) 0xbfc0d650 這個呢,代表numA的address嗎? stt不...
struct S_Struct
{
int numA;
int numB;
};
struct S_Struct *stt;
(gdb) p stt
$1 = (struct S_Struct *) 0xb7f2e0b0 這個address為尚未分配,系統隨意給的
(gdb) p &stt
$2 = (struct S_Struct **) 0xbfc0d650 這個呢,代表numA的address嗎? stt不是只是個pointer,還未分配記憶體
給它,怎麼numA已經有了address空間呢
這是我的理解,不知哪裡有錯呢..
thx
{
int numA;
int numB;
};
struct S_Struct *stt;
(gdb) p stt
$1 = (struct S_Struct *) 0xb7f2e0b0 這個address為尚未分配,系統隨意給的
(gdb) p &stt
$2 = (struct S_Struct **) 0xbfc0d650 這個呢,代表numA的address嗎? stt不是只是個pointer,還未分配記憶體
給它,怎麼numA已經有了address空間呢
這是我的理解,不知哪裡有錯呢..
thx
|
假如你是一個大將軍,現在皇帝要派你出去打仗了,皇帝給你調撥了五萬士兵。好了,此時你就是一個指針,你
可以操作那五萬士兵,他們就是那個真實的struct了。
但是你們出征,一定不能不行啊,皇帝得給你們配備車馬呀,而車馬就是記憶體了,因為它用來放你和你的士兵。
假如每輛車可以裝五個人,那你說你需要多少輛兵車呢?你可能會說,很簡單呀,五萬除以五,一萬輛兵車就可
以了呀!很不幸,你答錯了...一萬輛兵車的記憶體只能存放五萬名士兵,還需要一輛兵車來保存你...
現在明白了吧?雖然是一個指針,但是在記憶體中也要保存,如果不保存它,那就沒辦法操縱struct了,就好比
沒了你,那五萬士兵就沒人指揮了一樣呀...
可以操作那五萬士兵,他們就是那個真實的struct了。
但是你們出征,一定不能不行啊,皇帝得給你們配備車馬呀,而車馬就是記憶體了,因為它用來放你和你的士兵。
假如每輛車可以裝五個人,那你說你需要多少輛兵車呢?你可能會說,很簡單呀,五萬除以五,一萬輛兵車就可
以了呀!很不幸,你答錯了...一萬輛兵車的記憶體只能存放五萬名士兵,還需要一輛兵車來保存你...
現在明白了吧?雖然是一個指針,但是在記憶體中也要保存,如果不保存它,那就沒辦法操縱struct了,就好比
沒了你,那五萬士兵就沒人指揮了一樣呀...
|
(gdb) p &stt
$2 = (struct S_Struct **) 0xbfc0d650
这是指针的地址,也可以说是指针的指针啊,
你已经定义了一个指针,它当然也得有存储地址啊.
$2 = (struct S_Struct **) 0xbfc0d650
这是指针的地址,也可以说是指针的指针啊,
你已经定义了一个指针,它当然也得有存储地址啊.
|
p stt表示指针的值,该值是BSS段中的数据,一般不太会是随意的值,大部分编译器通常会为其初始化为0.
p &stt代表指针的地址,因为struct S_Struct *stt时编译器会为你分配一个4字节用来 ,这个4字节就是我们通常所的指针。主要是指的这4个字节的地址,在BSS段中。
p &stt代表指针的地址,因为struct S_Struct *stt时编译器会为你分配一个4字节用来 ,这个4字节就是我们通常所的指针。主要是指的这4个字节的地址,在BSS段中。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。