| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5274 人关注过本帖
标题:指针长度由什么决定呢?
取消只看楼主 加入收藏
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
结帖率:79.17%
收藏
已结贴  问题点数:10 回复次数:4 
指针长度由什么决定呢?
我电脑的CPU是 Intel® Celeron® Processor E3300
但是测试了下,发现指针的长度还是4个字节,为什么不是8个字节呢?
搜索更多相关主题的帖子: 指针 长度 
2010-08-22 09:29
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
程序代码:
#include <stdio.h>

class base
{
public:
    virtual void func(){printf("call base::func\n");};
};
class test:public base
{
public:
    void func(){printf("call test::func\n");};
};

int main()
{
    void(base::*p)() = &base::func;
    test x;
    (x.*p) ();    // 调用的是test::func;
    base y;
    (y.*p)();    // 调用的是base::func;
    // 以下在32位机器上, VC6 下是 4, GCC4.4.1 是 8 ,CodeGear C++ 6.10 的结果是12
    printf("sizeof( void(base::*p)()) %d\n" , sizeof(p) );
    printf("sizeof( void(base::*p)()) %d\n" , sizeof(class base) );

    return 0;
}
我这个测试用例说明在不同的编译器下确实是不一样的,但是都说编译器影响,这个太笼统了!

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-22 13:54
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
以下是引用Devil_W在2010-8-22 14:01:01的发言:

    printf("sizeof( void(base::*p)()) %d\n" , sizeof(class base) );
不同的编译器这句是不一样的。 应为有对Vtab的定义不一样。
而且这句跟指针没关系。

printf("sizeof( void(base::*p)()) %d\n" , sizeof(p) );
这个是判断函数指针。 我相信不同的编译器都会有一样的结果,在同一台机器上。

因为指针大小只跟CPU字长相关。
这是我实际的测试结果:
 以下在32位机器上, VC6 下是 4, GCC4.4.1 是 8 ,CodeGear C++ 6.10 的结果是12
    printf("sizeof( void(base::*p)()) %d\n" , sizeof(p) );

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-22 19:18
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
是不是数据总线也会影响这个指针的大小呢 ?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-22 23:25
vfdff
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:2172
专家分:425
注 册:2005-7-15
收藏
得分:0 
说的有点意思,但是怎么解释 我在 12楼提供的程序,
在gcc下编译,指针的长度既有4又有8呢?

~~~~~~~~~~~~~~~好好学习~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2010-08-25 00:17
快速回复:指针长度由什么决定呢?
数据加载中...
 
   



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

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