今天看到sizeof的一个奇怪的用法

shiqi_614 2011-11-27 10:53:56
上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int b[2];
int len=sizeof*b;
printf("%d\n",len);
}
输出的结果是4,为什么可以这么用???
...全文
501 47 打赏 收藏 转发到动态 举报
写回复
用AI写文章
47 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshiAAAshiwo 2011-11-29
  • 打赏
  • 举报
回复
Mark~學習了,原來還可以這樣用!
fangzhaoguo 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 fangzhaoguo 的回复:]
引用楼主 shiqi_614 的回复:
上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int b[2];
int len=sizeof*b;
printf("%d\n",len);
}
输出的结果是4,为什么可以这么用???

……
[/Quote]

你对数组名进行sizeof操作,就等于对指向数组的指针进行sizeof操作
fangzhaoguo 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 shiqi_614 的回复:]
上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int b[2];
int len=sizeof*b;
printf("%d\n",len);
}
输出的结果是4,为什么可以这么用???
[/Quote]

凡是指针均占4byte
tingfengx 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 fangzhaoguo 的回复:]

引用 15 楼 fangzhaoguo 的回复:
引用楼主 shiqi_614 的回复:
上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int b[2];
int len=sizeof*b;
printf("%d\n",len);……
[/Quote]
这是对数组名字的引用,还是对内容的引用
机智的呆呆 2011-11-28
  • 打赏
  • 举报
回复
因为sizeof是运算符,就跟+ - =啥的一样,i=0;所以可以sizeof 0,sizeof*b这么写,
而sizeof(类型)时必须加括号
tempnonody 2011-11-28
  • 打赏
  • 举报
回复
sizeof 加 变量类型 的号必须加括号
加表达式或变量 可加可不加


sizeof*b

sizeof(*b)

sizeof(b[0])
多喝水ooo 2011-11-28
  • 打赏
  • 举报
回复
sizeof是操作符。。。运行前就已经确定了
莫恶 2011-11-28
  • 打赏
  • 举报
回复
原来是用来误导人的....
skyworth98 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qyee16 的回复:]
怎么不看汇编干了什么事。。。。。。。。。。
[/Quote]

......
编译时确定。。。。。。。。
YUQB 2011-11-28
  • 打赏
  • 举报
回复
可以不加括号,它不是函数
simple_blue 2011-11-28
  • 打赏
  • 举报
回复
C++primer上面讲到过的吧,好像是说对于表达式类型,sizeof可以不加括号,基本类型必须加括号,我猜跟编译器的设计有关系
forget_loves 2011-11-28
  • 打赏
  • 举报
回复
还是没明白,没有见过,学习学习了
Nina_Nina_Nina 2011-11-28
  • 打赏
  • 举报
回复
20L说的非常对
Snight 2011-11-28
  • 打赏
  • 举报
回复
额 ,打错了
if( int len=sizeof*b == int len=sizeof(*b))
{
就是这个情况。
}
sorry
Snight 2011-11-28
  • 打赏
  • 举报
回复
if( int len=sizeof*b == int len=sizeof*b)
{
就是这个情况。
}
xuanxuan683 2011-11-28
  • 打赏
  • 举报
回复
因为数组名就是数组首元素的地址,所以*b就直接指向了数组中的数值,你定义的是整
型,所以长度就为4了
ghost5216 2011-11-28
  • 打赏
  • 举报
回复
因为sizeof是关键字
不是函数 可以不用括号
至于指针提领 没什么说的 楼主该明白吧
bmowker 2011-11-28
  • 打赏
  • 举报
回复
我也这么想,哈哈
[Quote=引用 8 楼 self001 的回复:]

引用 5 楼 duke56 的回复:

C/C++ code

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int main()
{
int b[2];
int *p=b,len2;
int len=sizeof*b;//b本身是个地址*b就是指向它的内容,……
[/Quote]

--signature------------------------------------
www.mowker.com/qklb/
Sniper80KG 2011-11-28
  • 打赏
  • 举报
回复
指针变量都是4个字节
shiqi_614 2011-11-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 fangzhaoguo 的回复:]

引用楼主 shiqi_614 的回复:
上代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
int b[2];
int len=sizeof*b;
printf("%d\n",len);
}
输出的结果是4,为什么可以这么用???
……
[/Quote]

如果把b定义成long long会输出8的。所以应该是b[0]的大小。
加载更多回复(25)

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧