2012-11-12 105 views
2

可能重复:
What the pointer size in 64 bits computer in C++?指针大小不正确

我在大学STUDING℃。

我尝试安装在Windows 7/8编程环境和有问题

此代码:

int main() 
    int *p; 
    printf("%d",sizeof(p)); 
    return 0; 
} 

打印纸4,而不是8(8打印在大学)。 我能做些什么?

我的Windows是64位和x64处理器。

+3

可能您的编译器会编译x86 CPU的代码。什么是编译器和哪些选项被包含在内?视觉工作室?如果是这样,你应该编译x64位应用程序,据我所知,默认情况下,它编译32位应用程序。 –

+1

编译为32位应用程序? –

+0

这不是问题的原因,但'sizeof'返回'size_t'。当你调用printf(“%d”,...)时,你应该使用'printf(“%zu”,...'或简单地将'sizeof'的结果转换为' int'。 –

回答

5

您可能将代码编译为32位应用程序。您需要将其编译为64位应用程序。检查你的编译器设置。没关系你的操作系统是64位的。

+0

好,那么编译我可以用来编译为64位应用程序? 我的编译器是minGW gcc。 –

+0

@AndreyDobrikov:我会用VS 2012,但它更像是一个C++编译器。对于C你可以尝试mingw-w64。 –

+0

@AndreyDobrikov尝试'-m64'作为编译器参数。 – RedX

1

这里的“问题”取决于编译体系结果。

C中的基本类型(例如int,double,char)没有预定义的大小;编译器决定使用哪种类型的大小。

至于指针,你通常希望能够解决你的机器上任何可用的内存位置。 在32位体系结构上,地址范围是2^32。由于指针不过是指内存位于的地址的数字,所以2^32个地址(即,4字节的范围)恰好适合。

对于64位系统,为了寻址所有存储器,需要2^64(即8个字节)的范围。

因此,指针大小需要依赖于系统架构。

请记住:所有指针类型(无论是int*, char*, double*还是其他)都有相同的大小!因此在32位上使用整数和整数指针可能会有点混淆,因为在大多数体系结构中,int的大小也是4字节。