为什么sizeof(int)与sizeof(int*)不同?

yog*_*ogi 6 c c++ sizeof

我想知道为什么在下面的程序中sizeof(int)返回一个不同的值sizeof(int*).

这是一个小程序:

int main(){
    std::cout<<sizeof(int)<<endl;
    std::cout<<sizeof(int*)<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

4
8
Run Code Online (Sandbox Code Playgroud)

直到现在我记得整数指针的大小是4byte(gcc编译器).如何检查指针的正确大小?它依赖于计算机吗?

我正在运行ubuntu 12.04

# lsb_release -a

Distributor ID: Ubuntu 
Description: Ubuntu 12.04 LTS 
Release:    12.04 
Codename:   precise
Run Code Online (Sandbox Code Playgroud)

指针的大小是不是常量(标准大小)8个字节.

tem*_*def 16

an int和an 的大小int*完全依赖于编译器和硬件.如果你看到a中使用了8个字节int*,你可能有64位硬件,每个指针转换成8个字节.

希望这可以帮助!

  • "你可能有一个64位操作系统." 实际上,但更重要的是,您的流程可能是一个64位流程.:-) (5认同)
  • 我想补充一点,唯一一个大小由标准定义的类型是`char`.`sizeof(char)`总是`1` (3认同)

gli*_*ite 7

sizeof(char) == 1

没有其他保证(*).

实际上,指针在16位系统上为2,在32位系统上为4,在64位系统上为8.


(*)参见James Kanze的评论.

  • `sizeof(char)<= sizeof(short)<= sizeof(int)<= sizeof(long)<= sizeof(long long)`也是有保证的.就像`sizeof(float)<= sizeof(double)<= sizeof(long double)`.(还保证所有尺寸都是不可或缺的,但这或多或少都是可以理解的.) (2认同)

Mar*_*k B 5

指针的大小取决于系统、编译器和体系结构。在 32 位系统上,通常为 32 位,而在 64 位系统上,通常为 64 位。

如果您尝试将指针存储为整数以便稍后再次恢复为指针,您可以使用intptr_t足够大的整数类型来容纳(我相信)正常(非函数)指针类型。