我正在做出(可能是错误的)假设,即它依赖于实现和/或系统。是否有类似 INT_MAX 或 CHAR_BIT 的东西可以告诉我内存中指针的大小?
6 回答
指针指向内存中的一个位置,因此在 32 位系统上它是 32 位,在 64 位系统上是 64 位。
指针大小也与它指向的类型无关,可以通过以下方式测量sizeof(anyType*)
UPD
我回答这个问题的方式是由提出问题的方式提出的(提出了一个简单的答案)。是的,我同意在像指向虚方法表的指针这样的情况下,指针的大小会有所不同,根据这篇文章,它会在不同的平台上,甚至在同一平台内的不同编译器上有所不同。就我而言,例如 (x64 ubuntu, GCC 4.6.3) 它等于 16 个字节。
会sizeof(int*)
工作吗?或者你要检查的任何东西?
它绝对取决于系统。通常一个简单的数据指针可以存储在一个 size_t 变量中。在 C++11 中有一个SIZE_MAX宏,它是 size_t 的最大值。在 C++11 中,您还可以使用std::intptr_t。
如果您考虑成员函数指针,事情会变得更加复杂。这取决于类是否从一个或多个父类继承,是否公开虚函数,当然还取决于实现。
在这里,您可以找到有关成员函数指针的详细文章,以及一些编译器的示例。
简单案例的答案很简单int*
,并且在其他答案中给出。
但请记住,使用多重继承的对象的指针成员可能包含多个(WORDs/DWORDs/QWORDs),在最坏的情况下最多为 5(五个)。
关于这个的好文章:http: //www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible
指针的大小取决于您的操作系统(实际上是操作系统的位数),请尝试 sizeof(type*) 函数。
#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();
}