16

我正在做出(可能是错误的)假设,即它依赖于实现和/或系统。是否有类似 INT_MAX 或 CHAR_BIT 的东西可以告诉我内存中指针的大小?

4

6 回答 6

33

指针指向内存中的一个位置,因此在 32 位系统上它是 32 位,在 64 位系统上是 64 位。

指针大小也与它指向的类型无关,可以通过以下方式测量sizeof(anyType*)

UPD

我回答这个问题的方式是由提出问题的方式提出的(提出了一个简单的答案)。是的,我同意在像指向虚方法表的指针这样的情况下,指针的大小会有所不同,根据这篇文章,它会在不同的平台上,甚至在同一平台内的不同编译器上有所不同。就我而言,例如 (x64 ubuntu, GCC 4.6.3) 它等于 16 个字节。

于 2012-07-16T09:51:35.023 回答
5

sizeof(int*)工作吗?或者你要检查的任何东西?

于 2012-07-16T09:51:03.580 回答
2

它绝对取决于系统。通常一个简单的数据指针可以存储在一个 size_t 变量中。在 C++11 中有一个SIZE_MAX宏,它是 size_t 的最大值。在 C++11 中,您还可以使用std::intptr_t

如果您考虑成员函数指针,事情会变得更加复杂。这取决于类是否从一个或多个父类继承,是否公开虚函数,当然还取决于实现。

在这里,您可以找到有关成员函数指针的详细文章,以及一些编译器的示例。

于 2012-07-16T10:47:10.633 回答
2

简单案例的答案很简单int*,并且在其他答案中给出。

但请记住,使用多重继承的对象的指针成员可能包含多个(WORDs/DWORDs/QWORDs),在最坏的情况下最多为 5(五个)。

关于这个的好文章:http: //www.codeproject.com/Articles/7150/Member-Function-Pointers-and-the-Fastest-Possible

于 2012-07-16T10:53:04.100 回答
1

指针的大小取决于您的操作系统(实际上是操作系统的位数),请尝试 sizeof(type*) 函数。

于 2012-07-16T09:56:59.433 回答
-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();
}
于 2015-11-15T15:06:12.030 回答