c/c++ 中任意类型的指针的大小一定等于sizeof(void*)吗?

luuillu 2011-07-12 04:29:24
加精
前几天看到一个帖子,说C++只规定了char 类型的大小为一字节,而其它类型的大小是由具体的编译器决定的。

那么,任意一个类型的指针(除了成员指针)的大小是否一定与sizeof (void*) 相等呢

我在网上搜了一下,似乎不能保证它们的大小一定相等。

如果不相同,不妨设在某个编译器上sizeof( int* )=8; 而sizeof(void*)=4
那么对于下列语句:
int a;
void *vp = &a;

vp保存的将是截断后的a的地址,而不是a的完整地址,而c/c++中而很多库函数的参数是void*类型的,如memset函数,如果不能保证任意一个类型的指针(除了成员指针)的大小与sizeof (void*) 相等,这些函数将不能正确执行。

因此,我推测 c/c++中任意一个类型的指针(除了成员指针)的大小一定与sizeof (void*) 相等。
由于没有读过c/c++标准文档,不知道里面是怎么规定的。
...全文
7009 187 打赏 收藏 转发到动态 举报
写回复
用AI写文章
187 条回复
切换为时间正序
请发表友善的回复…
发表回复
YQYM 2011-10-14
  • 打赏
  • 举报
回复
又学到东西了,哈哈
zhang2050jian 2011-10-13
  • 打赏
  • 举报
回复
我也学习一下!
aweiname2008 2011-09-04
  • 打赏
  • 举报
回复
32位机下(void *)是4个字节

同时看了一下int *,double * float* 都是4个字节
zyvscc 2011-08-02
  • 打赏
  • 举报
回复
学习了
xinjiXJZ 2011-07-21
  • 打赏
  • 举报
回复
我觉得是相等的。指针意味着内存地址,跟内存的寻址空间大小有关把。
-洪雨- 2011-07-21
  • 打赏
  • 举报
回复
一定相等的
wdyhyx1965 2011-07-21
  • 打赏
  • 举报
回复
据说现在有新的时钟硬件 某些场合上会不一样
勤奋的小游侠 2011-07-21
  • 打赏
  • 举报
回复
学习中
jemneycool 2011-07-21
  • 打赏
  • 举报
回复
52楼给力!!!!力顶52楼。
wjlazio 2011-07-20
  • 打赏
  • 举报
回复
不错,学习了。。。。
wdyhyx1965 2011-07-20
  • 打赏
  • 举报
回复
据说现在有新的时钟硬件 某些场合上会不一样
zichuanxiufan 2011-07-20
  • 打赏
  • 举报
回复
应该是相等的,至少在一个程序里是这样的。
iwong 2011-07-20
  • 打赏
  • 举报
回复
32位OS的指针不为4个字节,那还能用么?
sheepcorpse 2011-07-20
  • 打赏
  • 举报
回复
从内存指针上来说,大多都是定长的, 这个一方面从硬件上就有一定限制, 另一方面系统层提供的内存操作接口, 通常都是平坦内存并且指针地址是定长的,不过也可能有一些奇妙的OS不在此列。

内存指针根据编译器和编译环境不同,目前比较常见的是32位或者64位。

如果楼主所说的指针包含了内存定位以外的含义,那么一切皆有可能,具体有多长得看写编译器的人的心情。

打个比方,假如,某天写编译器的人心情不好,觉得不能只有this,还要有that,那么这个非内存指针的成员函数指针岂不是得有12位或者24位?

正如前面某楼所说,这个成员函数指针从狭义上来说不能算个指针,而是个指针运算。

我是没怎么看过C++标准的,但做多了也有自己的理解或者误解方式, 不知道能否帮到楼主。
hado3096549 2011-07-20
  • 打赏
  • 举报
回复
哦,这样啊,谢谢
bonaparte 2011-07-20
  • 打赏
  • 举报
回复
指针大小和操作系统有关,是确定的。。
jack_nono 2011-07-19
  • 打赏
  • 举报
回复
学习了
yuliuqingse 2011-07-19
  • 打赏
  • 举报
回复
但是由不得不掌握
yuliuqingse 2011-07-19
  • 打赏
  • 举报
回复
指针好难
鸿雁 2011-07-19
  • 打赏
  • 举报
回复
学习中
加载更多回复(164)

64,648

社区成员

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

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