我正在做出(可能是错误的)假设,即它是依赖于实现和/或系统的。是否有类似INT_MAX或CHAR_BIT的东西会告诉我内存中指针的大小?
答案 0 :(得分:29)
指针指向内存中的一个位置,因此在32位系统上为32位,在64位系统中为64位。
指针大小也与它指向的类型无关,可以通过sizeof(anyType*)
<强> UPD 强>
我回答这个问题的方式是问问题的方式(建议一个简单的答案)。是的,我确实同意,在指向虚方法表的情况下,指针的大小会有所不同,根据this article,它会在不同的平台上变化,甚至在同一平台的不同编译器上也会有所不同。在我的例子中,例如(x64 ubuntu,GCC 4.6.3)它等于16个字节。
答案 1 :(得分:5)
sizeof(int*)
会有效吗?或者无论你想要检查什么?
答案 2 :(得分:2)
这绝对是系统依赖的。通常,简单的数据指针可以存储在size_t变量中。在C ++ 11中,有SIZE_MAX宏,它是size_t的最大值。在C ++ 11中,您还可以使用std::intptr_t。
如果考虑成员函数指针,事情会变得更加复杂。如果类继承自一个或多个父项,如果它公开虚函数,当然还有实现,则它取决于其他事项。
Here你可以找到一篇关于成员函数指针的详细文章,以及一些编译器的例子。
答案 3 :(得分:2)
像int*
这样的简单案例的答案很简单,并在其他答案中给出。
但请记住,使用多重继承的对象的指针成员可能包含多个(WORD / DWORD / QWORD),在最坏的情况下最多可包含5个(五个)。
关于此的好文章:http://www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
答案 4 :(得分:1)
指针大小取决于您的操作系统(实际上是操作系统的位数),请尝试sizeof(类型*)函数。
答案 5 :(得分:-1)
#include<stdio.h>
#include<conio.h>
void main()
{
printf(" %d",sizeof(int *));
printf(" %d",sizeof(char *));
printf(" %d",sizeof(float *));
printf(" %d",sizeof(double *));
getch();
}