可能重复:
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处理器。
可能重复:
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处理器。
您可能将代码编译为32位应用程序。您需要将其编译为64位应用程序。检查你的编译器设置。没关系你的操作系统是64位的。
好,那么编译我可以用来编译为64位应用程序? 我的编译器是minGW gcc。 –
@AndreyDobrikov:我会用VS 2012,但它更像是一个C++编译器。对于C你可以尝试mingw-w64。 –
@AndreyDobrikov尝试'-m64'作为编译器参数。 – RedX
这里的“问题”取决于编译体系结果。
C中的基本类型(例如int
,double
,char
)没有预定义的大小;编译器决定使用哪种类型的大小。
至于指针,你通常希望能够解决你的机器上任何可用的内存位置。 在32位体系结构上,地址范围是2^32。由于指针不过是指内存位于的地址的数字,所以2^32个地址(即,4字节的范围)恰好适合。
对于64位系统,为了寻址所有存储器,需要2^64(即8个字节)的范围。
因此,指针大小需要依赖于系统架构。
请记住:所有指针类型(无论是int*, char*, double*
还是其他)都有相同的大小!因此在32位上使用整数和整数指针可能会有点混淆,因为在大多数体系结构中,int
的大小也是4字节。
可能您的编译器会编译x86 CPU的代码。什么是编译器和哪些选项被包含在内?视觉工作室?如果是这样,你应该编译x64位应用程序,据我所知,默认情况下,它编译32位应用程序。 –
编译为32位应用程序? –
这不是问题的原因,但'sizeof'返回'size_t'。当你调用printf(“%d”,...)时,你应该使用'printf(“%zu”,...'或简单地将'sizeof'的结果转换为' int'。 –