c++自定义数据类型之指针,问题在注释里,看完代码再看注释,求高手解答

c++自定义数据类型之指针,问题在注释里,看完代码再看注释,求高手解答Tyni:#include<iostream>usingnamespacestd;template<... c++自定义数据类型之指针,问题在注释里,看完代码再看注释,求高手解答Tyni:
#include <iostream>
using namespace std;

template <class T>
struct LinkNodeSimple
{
T data;
LinkNodeSimple<T> *link;
};

int main()
{
//这里有个疑问,指针head存储的node1的地址是存储在LinkNodeSimple类型的哪个域,还是说对于这种自定义类型的指针head,它的数据域和指针域根本没有作用,head存储的node1的地址占据了head的整个空间?
LinkNodeSimple<int> node1, node2, node3, *head;

node1.data = 1;
node2.data = 2;
node3.data = 3;
head = &node1;
node1.link = &node2;
node2.link = &node3;
node3.link = NULL;

//如果想看看head的data域和指针域该怎么做,还有就是head所存储的node1的地址,到底是在指针head的哪里

return 0;
}
展开
 我来答
清河大侠
2018-04-01 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.6万
采纳率:66%
帮助的人:1211万
展开全部

问题本身没那么难,这是一个理解问题。根据你的理解,指针“head”本身是有个空间,“额外”存储它能指向的东西。实际上不是这样的。

在你的程序里,指针“head”指向了node1。如何理解呢?是这样:

head本身,只包含了一个只够容纳一个“地址”的空间,在普通的32位系统下,指针通常只占据4个字节。这和head所指向的数据类型没有直接关系,无论node1的大小是多少,head都只占4个字节。或者说,“指针”类型的变量的大小是独立于数据结构之外的。之所以说某指针变量是“某数据结构”的指针,只是为了正确进行指针运算和结构解析。

node1.link和node2.link的情况和head一样,只是个指针。

举个实际生活中的例子。你家有各100平米的3个房子。分别定义为house1,house2,house3。这每个house的大小都是100平米。如果你要说我家的“哪个房子”,则只需要区分这3个房子就够了。如果用2进制来表示,只需要2个bit。这2个bit的“房子编号”就是“房子指针”,它和房子的面积之类没有任何关系。房子可以是100平米,也可以是50平米。

希望你能够理解。如需要,可以继续聊。谢谢

White_MouseYBZ
2018-04-01 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6711万
展开全部
可以说你的指针概念还一塌糊涂。指针通常是“指针变量”的简称,它就是存放另一个变量(广义的)地址的变量,也就是这个指针变量的“值”等于某个变量的地址;在32位int平台下指针只有4个字节,哪里还有什么“是在head的哪里”的说法?就是head的值等于node1的地址而已。变量通常不是一字节,所以指针的值只是变量“标称地址”的值——举例说,有int a,*p=&a;后,由于a有4个字节,p的值只是a的存储空间的“一个代表性(标称)”地址,在小端机中以变量a的最低的那个地址代表。你这里head=&node1后,head的值就是node1中的第一个成员的“标称地址”。当然指针还载有其他信息,比如前例中p除了值是a的标称地址外,还知道a是4个字节;head还知道node1有多少个成员,共有多少字节等。但这并不存在于指针的“值”中,而是由指针类型决定的(注:指针的类型就是它能够指向的目标的类型)。
追问
谢谢,😄
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式