标题:有关sizeof关键字的问题
只看楼主
jafisher
Rank: 1
等 级:新手上路
威 望:1
帖 子:12
专家分:8
注 册:2010-7-24
结帖率:50%
已结贴  问题点数:20 回复次数:7 
有关sizeof关键字的问题
int *p=NULL或是char *p=NULL;
为什么两个sizeof(p)=4?
p不是为空吗,为什么还占4个内存单元?
搜索更多相关主题的帖子: sizeof 关键 
2010-07-24 17:07
ymqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:141
专家分:143
注 册:2010-7-14
得分:10 
空指针是说 指针值为0的 指针,指向NULL 也就是0,注意是整数0,不是'\0' 。但它还是有所指,及p存有地址。
标准并没有对空指针指向内存中的什么地方这一个问题作出规定,也就是说用哪个具体的地址值(0x0 地址还是某一特定地址)表示空指针取决于系统的实现。我们常见的空指针一般指向 0 地址,即空指针的内部用全 0 来表示(zero null pointer,零空指针);也有一些系统用一些特殊的地址值或者特殊的方式表示空指针(nonzero null pointer,非零空指针)。
2010-07-24 17:33
ymqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:141
专家分:143
注 册:2010-7-14
得分:0 
空指针究竟指向了内存的哪个地方?

1,按照标准来说NULL和0是一样的int *p=new int(0)和int *p=new int(NULL)结果是一样的。

2,int *p=NULL和int *p=0;都是定义指针p并初始化指针p为指向0x00000000的地址(至少WINDOWS操作系统是这样的)。“0x00000000”此地址可理解为空地址。当然你也可以自己写个操作系统或编译器把该地址定为“0xFFFFFFFF",甚至更变态的地址

3,我们没有必要讨论NULL和0的区别。讨论不出结果的,因为操作系统,编译器已经做成这样子了。

char *p1=new char('1');
char *p2="123456";
cout<<p1<<endl;cout<<*p1<<endl;cout<<p2<<endl;cout<<*p2;
char *p3="NULL";char *p3='0';
char *p3=NULL;   char *p3=0;

int *p6=0;int *p7=new int(0);
cout<<p7<<endl;
cout<<*p7<<endl;
搞清楚以上这些就行了。
int *p=0;
int *p=1;//这个是错的;
2010-07-24 17:40
ymqq
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:141
专家分:143
注 册:2010-7-14
得分:0 
http://www. 去看一下吧!!
2010-07-24 17:41
jafisher
Rank: 1
等 级:新手上路
威 望:1
帖 子:12
专家分:8
注 册:2010-7-24
得分:0 
  多谢指点~!
2010-07-24 18:03
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:10 
跑题了吧?

LZ问的是指针变量占用空间的问题
曰:指针变量也是变量,是变量就要占用空间的,这和它的内容是否为空没关系,空值只不过是指针变量合法取值的一种。
就好象说,路边有个金属牌子,上面写着“长安街”;
即使你抹掉上面的字,它也还是个金属牌子,还是放在那里占地方的。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2010-07-24 21:27
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
得分:0 
回复 楼主 jafisher
空指针也是指针的一种
一般情况下,32位机指针大小应该是 32/8    4字节,8位机上应该是1个字节
2010-07-28 09:12



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-313891-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.585174 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved